Как получить значение переменной из QueryList?

Использую следующую конструкцию для получения доступа к чилд компонентам:

@ViewChildren(FilterComponent) filtersList: QueryList;

Inside template I have:

<button [disabled]="!filterHasChanges()">

И обработчик:

public filterHasChanges(): boolean {
        return this.filtersList.reduce((acc: boolean, b) => acc || b.filter.selected.length > 0, false);
    }


Как видно я пытаюсь пройтись по всем чилд компонентам и проверить каждый фильтр переменную на b.filter.selected.length > 0

Но из-за того что функция filterHasChanges()срабатывает быстрее чем чилды билдятся то получаю ошибку:

TypeError: Cannot read property 'reduce' of undefined
    at OrdersExecutionSidebarComponent.filterHasChanges


Как это правильно использовать?

В документации написано:

Remember —
The QueryList is initialized only before the ngAfterViewInit lifecycle hook, therefore, is available only from this point.
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
buttonDisabled = this.filtersList.changes.pipe(
  map(list => list.reduce((acc: boolean, b) => acc || b.filter.selected.length > 0, false),
)


<button [disabled]="!(buttonDisabled | async)">
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы