我具有其中我顯示數據(用戶)的一個表中的組分從一個http請求的API生成的。有各種各樣的桌子上的過濾器,所以我生成表數據,如下所示:刷新列表:Angular2 + RxJS
this.displayUsers$ = Observable.combineLatest(
this.users$,
this.siteFilter$,
this.clientFilter$,
this.activeFilter$,
this.nameFilter$
)
.map(([users, siteFilter, clientFilter, activeFilter, nameFilter]) => {
console.log("Users changed? ", users);
if (siteFilter === null
&& clientFilter === null
&& activeFilter === null
&& nameFilter.length < 1) {
return users;
}
return users
.filter(user => {
// manipulate users array based on filters
})
});
的xFilter$
s爲響應於在模板改變它們的輸入發射的新值BehaviorSubjects。 users$
被分配如下:
this.users$ = this.userService.getList();
凡getList()
返回一個HTTP請求來獲取用戶的列表。
列表成功更新每當過濾器改變了,但我有問題,當我需要更新與新的用戶列表。例如,用戶可以在用戶表上執行CRUD操作(即刪除用戶)。但是,當用戶被刪除時,該表不會更新以反映此更改。我目前使用的方法(試行),以新鮮的表是通過刪除操作的成功回調調用刷新功能:
refreshUserList() {
console.log("Refreshing user list");
this.users$ = this.userService.getList();
}
儘管手術後調用此完成,combineLatest觀察到的不再次得到「觸發」,列表數據仍舊陳舊。有沒有更好的方法來刷新combineLatest與http請求生成的數據?
這使得有很大的意義,感謝您的建議。我覺得我失去了與我然而實施東西,因爲現在我沒有得到任何表中的數據(即使當我改變過濾器)。我更改refreshUserList(){updateUsersTrigger.next(); }並在ngOnInit()中調用它,但仍然沒有運氣。 – natmegs
@natmegs,嘗試這樣的事情:'updateUsersTrigger.startWith(空).switchMap(()=> ...呼叫服務...)'代替ngOnInit()發光的東西 - 我不希望它的工作實際上,我認爲這太早了。 –