httpリクエストから生成されたデータ(ユーザー)の表をAPIに表示するコンポーネントがあります。フィルタの様々な次のように私は、テーブルのデータを生成し、テーブルの上にあります。combineLatestを使用したリフレッシュリスト: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$
が割り当てられます。getList()
は、httpリクエストを返す
this.users$ = this.userService.getList();
は、ユーザーのリストを取得します。
フィルタが変更されるとリストは正常に更新されますが、新しいユーザーでリストを更新する必要があるときに問題が発生します。例えば、ユーザは、ユーザのテーブルに対してCRUD操作を実行することができる(すなわちユーザを削除する)ことができる。ただし、ユーザーが削除されると、この変更を反映するためにテーブルは更新されません。私が現在使用している方法は、表は削除操作の成功コールバックでリフレッシュ機能を呼び出すことである新鮮に(してみてください):操作の後にこれを呼び出すにもかかわらず
refreshUserList() {
console.log("Refreshing user list");
this.users$ = this.userService.getList();
}
combineLatest観測可能ではない、完全ですもう一度「トリガー」を取得し、リストのデータは失効したままになります。 combineLatestによって生成されたデータをHTTPリクエストでリフレッシュするより良い方法はありますか?
これは多くの意味を持ちますが、提案に感謝します。しかし、今では(たとえ私がフィルタを変更しても)テーブルのデータが得られないので、私の実装で何かが欠けていると思います。私はrefreshUserList(){updateUsersTrigger.next()を変更しました。 }これをngOnInit()で呼び出すが、まだ運がない。 – natmegs
@natmegs、ngOnInit()で何かを放出するのではなく、 'updateUsersTrigger.startWith(null).switchMap(()=> ... call service ...)'のようなものを試してみてください。実際、私はそれが早すぎると思う。 –