紫衣仙女
2019-03-14 14:15:38
在使用angular4框架開發(fā)過程中,會遇到某些場景。例如:公共組件中有一個全局下拉列表,每當該下拉列表值改變,所有激活的子組件都要做出相應改變。ng1時有$watch指令,但是在ng4中沒有找到類似方法。目前采用的是生命周期的Docheck(),對性能消耗非常大,還有一些不可預期的問題,想請教有沒有更好的監(jiān)聽方法.
2 回答

米脂
TA貢獻1836條經(jīng)驗 獲得超3個贊
結合Rxjs,下拉列表的值作為一個BehaviorSubject放到公用的service中,子組件模版上直接使用async pipe解析值。
例(公用組件的service):
import { BehaviorSubject } from 'rxjs/BehaviorSubject'
...
export XXXService{
downData:BehaviorSubject<any[]> = new BehaviorSubject<[]>
...
}
每次修改下拉值只需(設注入service為xxxService):
xxxService.downData.next(更新的數(shù)據(jù))
所有的子組件引用服務后只需在模版使用async pipe便可自動監(jiān)聽訂閱數(shù)據(jù)變化:
模版
<div *ngFor="let item of (xxxService.downData | async)"></div>
也可以直接在組件中訂閱:
xxxService.downData.subscribe(data => {
//監(jiān)聽到變化
...
})
注意service一定要保持單例
添加回答
舉報
0/150
提交
取消