บริการที่ใช้ร่วมกันเป็นวิธีที่ดีที่สุด
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);
}
}
ดูคำถามนี้สำหรับรายละเอียดเพิ่มเติม: