В настоящее время вы используете async
трубу.Чтобы получить желаемый результат, вы можете использовать (или связать) другой пользовательский канал с вашими данными для извлечения определенных свойств.
Я разветвил ваш пример stackblitz и изменил код с помощью решения. Вот мое рабочее решение .
По сути, все, что вам нужно сделать, это использовать пользовательский канал.
{{ todos$ | async | myCustomFilter }}
В моем примере (stackblitz) я делаю:
<p>
No. of Completed Todos: {{ (todos$ | async | filterByCondition: {property: 'completed', value: true}).length }}
</p>
<p>
No. of Incomplete Todos: {{ (todos$ | async | filterByCondition: {property: 'completed', value: false}).length }}
</p>
Правка после ваших комментариев
Существует два подхода к желаемому результату: 1) Используйте пользовательский канал.Вы можете параметризовать канал так же, как я, или даже создавать свои собственные условия и оценивать, передавая параметр в свой канал (как я делал в примере для свойства args
).
Т.е.
<div>{{$todos | async | filterTodo: 'byDate'}}</div>
Теперь вы можете поместить обработчик в свой фильтр pipeTodo для этого значения byDate
.
2) Использовать разные наблюдаемые для разных данных.
class MyComponent {
todos$;
completedTodos$;
constructor() {
this.todos$ = this.someService.getTodos(); // from behavior subject
this.completedTodos$ = this.todos$.pipe(
filter((item) => {
// your filter code here
})
)
}
}