Я попытался найти способ фильтрации массива с помощью функции, которая возвращает наблюдаемое логическое значение.
Мне нужен канал, который фильтрует значения на основе разрешений пользователей и учитывая тот факт, что разрешения Я не могу предположить, что они присутствуют при загрузке страницы.
Я хочу, чтобы это происходило в трубе, потому что это может быть использовано позже.
Итак, наивным способом я хочу сделать следующее:
Вызывается с помощью
*ngFor="let value of values | selector"
Труба:
... ...
@Pipe({
name: 'selector',
pure: false
})
... ...
transform(value: { value, viewValue, permission: AuthGroup }[]): Observable<any[]> {
return value.filter(o => this.authorizationService.hasPermission(o.permission).subscribe(s => s));
}
Где this.authorizationService.hasPermission
возвращает Observable<boolean>
Но я не смог найти ничего подробного, если это вообще возможно.
Я понимаю, что плохо иметь .subscribe
там, это просто для обозначения моего намерения.
Я пробовал много разных вещей, но я думаю, что либо это не так возможно, или я просто не знаком с синтаксисом RX JS, чтобы он работал правильно.
Редактировать: Если другие сталкиваются с этим и используют ответ Курта, вам нужно было бы добавить | async
трубу следующим образом:
*ngFor="let value of values | selector | async"
, потому что труба возвращает наблюдаемую, я не сделал не включайте в первоначальный вопрос, потому что я хотел, чтобы вопрос был полностью наивным.