Một dịch vụ chia sẻ là cách tiếp cận tốt nhất
export class SharedService {
globalVar:string;
}
Nhưng bạn cần phải rất cẩn thận khi đăng ký để có thể chia sẻ một ví dụ duy nhất cho toàn bộ ứng dụng của bạn. Bạn cần xác định nó khi đăng ký ứng dụng của bạn:
bootstrap(AppComponent, [SharedService]);
nhưng không xác định lại nó trong các providers
thuộc tính của các thành phần của bạn:
@Component({
(...)
providers: [ SharedService ], // No
(...)
})
Nếu không, một phiên bản mới của dịch vụ của bạn sẽ được tạo cho thành phần và các thành phần phụ của nó.
Bạn có thể xem câu hỏi này liên quan đến cách thức tiêm phụ thuộc và kim phun phân cấp hoạt động trong Angular2:
Bạn có thể nhận thấy rằng bạn cũng có thể xác định Observable
các thuộc tính trong dịch vụ để thông báo cho các bộ phận trong ứng dụng của bạn khi các thuộc tính toàn cầu của bạn thay đổi:
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);
}
}
Xem câu hỏi này để biết thêm chi tiết: