是,作爲另一個答案中指出,必須設置subscribe
處理程序中status
。然而,這也意味着status
根本不設置,直到觀察者發出第一個項目。我建議爲使status
可觀察到的本身,你可以實現的東西像
this.status$ = this.propertyService.getProperties()
.startWith(false)
.map(b => b ? 'active' : 'waiting');
現在在你的模板顯示狀態
STATUS IS {{status$ | async}}
替代和顯示器將是waiting
,直至觀察到第一次發生火災。
如果您需要訪問事件處理程序的status
當前值,你可以用
logStatus() {
this.status$.take(1).subscribe(s => console.log("status is", s);
}
這樣做。如果你以同樣的方式對待properties
,作爲觀察的,
ngOnInit() {
this.properties$ = this.propertyService.getProperties();
this.status$ = this.properties$.startWith(false).map(b => b ? 'active' : 'waiting');
}
然後你就可以避免你的ngOnInit
中的所有訂閱,這些訂閱將需要被記住然後在ngOnDestroy
被拆除。
謝謝 - 多數民衆贊成在完美 – rhysclay