如何对 BehaviorSubject 数据进行排序?
How to sort BehaviorSubject data?
我已将 this.userrights
替换为 userrights$
observable:
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上重写?
我创建了一个包含过滤器状态的新主题 public state$ = new Subject<UserRightState >()
。
如何过滤 BehaviorSubject 数据并 return 返回?
您可以 map
将 observable 转换为另一个 observable:
const filteredRights$ = userrights$.pipe(
map(rights => rights.filter(rights => // whatever condition))
);
如果您同时拥有 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
。
我已将 this.userrights
替换为 userrights$
observable:
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上重写?
我创建了一个包含过滤器状态的新主题 public state$ = new Subject<UserRightState >()
。
如何过滤 BehaviorSubject 数据并 return 返回?
您可以 map
将 observable 转换为另一个 observable:
const filteredRights$ = userrights$.pipe(
map(rights => rights.filter(rights => // whatever condition))
);
如果您同时拥有 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
。