如何对 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