Layanan bersama adalah pendekatan terbaik
export class SharedService {
globalVar:string;
}
Tetapi Anda harus sangat berhati-hati saat mendaftar untuk dapat berbagi satu contoh untuk seluruh aplikasi Anda. Anda perlu mendefinisikannya saat mendaftarkan aplikasi Anda:
bootstrap(AppComponent, [SharedService]);
tetapi tidak untuk mendefinisikannya lagi dalam providers
atribut komponen Anda:
@Component({
(...)
providers: [ SharedService ], // No
(...)
})
Kalau tidak, instance baru dari layanan Anda akan dibuat untuk komponen dan sub komponennya.
Anda dapat melihat pertanyaan ini mengenai bagaimana injeksi ketergantungan dan injektor hirarki bekerja di Angular2:
Anda dapat melihat bahwa Anda juga dapat menentukan Observable
properti di layanan untuk memberi tahu bagian dari aplikasi Anda ketika properti global Anda berubah:
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);
}
}
Lihat pertanyaan ini untuk lebih jelasnya: