Общий сервис - лучший подход
export class SharedService {
globalVar:string;
}
Но вы должны быть очень осторожны при регистрации, чтобы иметь возможность поделиться одним экземпляром для всего вашего приложения. Вы должны определить это при регистрации вашего приложения:
bootstrap(AppComponent, [SharedService]);
но не определять его снова в providers
атрибутах ваших компонентов:
@Component({
(...)
providers: [ SharedService ], // No
(...)
})
В противном случае будет создан новый экземпляр вашего сервиса для компонента и его подкомпонентов.
Вы можете взглянуть на этот вопрос относительно того, как в Angular2 работают внедрение зависимостей и иерархические инжекторы:
Вы также можете заметить, что вы также можете определить Observable
свойства в сервисе, чтобы уведомлять части вашего приложения об изменении ваших глобальных свойств:
export class SharedService {
globalVar:string;
globalVarUpdate:Observable<string>;
globalVarObserver:Observer;
constructor() {
this.globalVarUpdate = Observable.create((observer:Observer) => {
this.globalVarObserver = observer;
});
}
updateGlobalVar(newValue:string) {
this.globalVar = newValue;
this.globalVarObserver.next(this.globalVar);
}
}
Смотрите этот вопрос для более подробной информации: