我已經替換this.userrights為userrights$可觀察的:
public userrights$: Observable<UserRight[]>;
之前是通過單擊事件從模板呼叫過濾器方法:
filterState(state: UserRightState) {
this.userrights = this.clonned.filter((st: UserRight) => (this.filterBy == state ? true : st.value === getRightStateValue(state)));
this.filterBy = this.filterBy == state ? null : state;
}
如何在RXJS上重寫它?
我創建了一個包含 filter state 的新主題public state$ = new Subject<UserRightState >()。
如何過濾 BehaviorSubject 資料并回傳?
uj5u.com熱心網友回復:
如果您同時擁有 filterBy 和要在兩個 Observable 中過濾的串列,則可以使用combineLatest():
filterBy$ = new BehaviorSubject<UserRightState | null>(null);
allUserRights$ = new BehaviorSubject<UserRight[]>([]);
userrights$ = combineLatest([
filterBy$.pipe(
pairwise(),
map(([prevState, state]) => prevState === state ? null : state),
), // This will take care of toggling filterBy.
allUserRights$,
]).pipe(
map(([filterBy, userRights]) => userRights.filter(/* do whatever with `filterBy` */))
)
filterState(state: UserRightState) {
filterBy$.next(state);
}
如果您知道這this.clonned永遠不會改變,您combineLatest當然可以洗掉。
uj5u.com熱心網友回復:
您可以map將 observable 轉換為另一個 observable:
const filteredRights$ = userrights$.pipe(
map(rights => rights.filter(rights => // whatever condition))
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/345349.html
