我有一個Angular 2組件,它顯示項目列表,並註冊到發佈事件的服務。問題是即使我在收到一個事件時沒有做任何事情,Angular也會更新視圖(或者至少在我猜測它不應該做什麼時)。Angular2組件視圖不斷更新
正如您在控制檯中所看到的,每次我的服務發佈消息時,都會調用我的項目的「getTitle()」方法。
即使我沒有註冊到我的服務,並且如果我的組件沒有實現MyServiceListener接口,每次服務獲取消息時都會調用getTitle。如果我沒有在構造函數中給我的組件提供服務,那麼一切都很好。所以,我的依賴注入有些問題,但是什麼?
這裏是plunker的相關代碼:
我的服務和其偵聽器接口:
export interface MyServiceListener {
onMessage(_message: any);
}
export class MyService {
private m_listener: MyServiceListener;
constructor() {
window.setInterval(() => {
if (this.m_listener !== undefined) {
this.m_listener.onMessage("Hi");
}
}, 500);
}
setListener(_listener: MyServiceListener) { this.m_listener = _listener; }
}
Item類:
export class Item {
m_title: string;
constructor(_title: string) {
this.m_title = _title;
}
getTitle(): string { console.log("getTitle"); return this.m_title; }
}
我的組件:
@Component({
selector: 'my-app',
template : `
<div>
<ul>
<li *ng-for="#item of m_items">
{{item.getTitle()}}
</li>
</ul>
</div>
`
})
export class App implements TestBugAngularServiceListener {
private m_items: Array<Item> = new Array<Item>();
constructor(_communicationService: MyService) {
this.m_items.push(new Item("A"));
this.m_items.push(new Item("B"));
this.m_items.push(new Item("C"));
_communicationService.setListener(this);
}
onMessage(_message: any) {
}
}
bootstrap(App, [MyService]).catch(err => console.error(err));