Um serviço compartilhado é a melhor abordagem
export class SharedService {
globalVar:string;
}
Mas você precisa ter muito cuidado ao registrá-lo para poder compartilhar uma única instância para todo o aplicativo. Você precisa defini-lo ao registrar seu aplicativo:
bootstrap(AppComponent, [SharedService]);
mas não para defini-lo novamente dentro dos providers
atributos de seus componentes:
@Component({
(...)
providers: [ SharedService ], // No
(...)
})
Caso contrário, uma nova instância do seu serviço será criada para o componente e seus subcomponentes.
Você pode dar uma olhada nesta pergunta sobre como a injeção de dependência e os injetores hierárquicos funcionam no Angular2:
Você pode perceber que também pode definir Observable
propriedades no serviço para notificar partes do seu aplicativo quando suas propriedades globais forem alteradas:
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);
}
}
Veja esta pergunta para mais detalhes: