Un servicio compartido es el mejor enfoque
export class SharedService {
globalVar:string;
}
Pero debe tener mucho cuidado al registrarlo para poder compartir una sola instancia para toda su aplicación. Debe definirlo al registrar su aplicación:
bootstrap(AppComponent, [SharedService]);
pero no para definirlo nuevamente dentro de los providers
atributos de sus componentes:
@Component({
(...)
providers: [ SharedService ], // No
(...)
})
De lo contrario, se creará una nueva instancia de su servicio para el componente y sus subcomponentes.
Puede echar un vistazo a esta pregunta sobre cómo funcionan la inyección de dependencia y los inyectores jerárquicos en Angular2:
Puede observar que también puede definir Observable
propiedades en el servicio para notificar partes de su aplicación cuando cambian sus propiedades globales:
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);
}
}
Vea esta pregunta para más detalles: