【发布时间】:2017-10-10 19:08:44
【问题描述】:
我有一个组件,我在其中显示从对 API 的 http 请求生成的数据(用户)表。表格上有多种过滤器,所以我生成表格数据如下:
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 observable 不会再次被“触发”,并且列表数据仍然是陈旧的。有没有更好的方法用 http 请求刷新 combineLatest 生成的数据?
【问题讨论】:
标签: javascript angular typescript rxjs combinelatest