Как проверить, пустой ли observable?
https://stackblitz.com/edit/angular-ivy-lcsphp
Не понимаю, как сделать проверку на observable, если он пустой:
<div *ngFor="let book of bookings$ | filterByStatus: 'pending' | async; trackBy: trackById" >
Это работает, пока существуют заказы со стасусом "pending". Но если таких нет, показывает ошибку "TypeError: Cannot read property 'filter' of undefined", что логично.
Вот как я фильтрую это в pipe:
@Pipe({
name: 'filterByStatus'
})
export class FilterByStatusPipe implements PipeTransform {
transform(orders$: Observable, status: string): Observable {
return orders$
.pipe(map((o: Order[]) =>
o.filter(o => o.status == status)))
}
}
Подскажите, пожалуйста.
Ответы (2 шт):
Автор решения: Nikita Reutov
→ Ссылка
Используйте оператор filter() внутри pipe() перед вызовом оператора map()
@Pipe({
name: 'filterByStatus'
})
export class FilterByStatusPipe implements PipeTransform {
transform(orders$: Observable, status: string): Observable {
return orders$
.pipe(
filter(o => !!o),
map((o: Order[]) =>
o.filter(o => o.status == status))
)
}
}
Автор решения: kompaniietst
→ Ссылка
Все оказалось гораздо проще
transform(orders$: Observable, status: string): Observable {
return orders$
.pipe(map((orders: Order[]) => {
if (orders) return orders.filter(o => o.status == status)
}))
}