Angular 5 viewchildren недоступен в хуке afterviewinit

В компоненте со свойством ViewChildren я хочу создать некоторые элементы SVG на основе данных, которые содержит каждый ViewChild.

Если я помещаю логику в ловушку AfterViewInit, ViewChildren еще не определены. Я пробовал несколько подходов, пытаясь использовать этот крючок, но безуспешно.

ngAfterViewInit() {
    // ViewChildren.first is undefined
    setTimeout(() => setupSVG(this.viewChildren), 0);

    // ViewChildren.first is undefined
    setupSVG(this.viewChildren);
}

Однако, если я помещу логику в ловушку AfterViewChecked, она будет работать, но будет вызываться много раз после того, как дочерний элемент представления будет содержать свой список компонентов.

ngAfterViewChecked() {
    if (! this.viewChildren.first) {
        return;
    }

    setupSVG(this.viewChildren);
}

Я остановился на менее оптимальном решении с использованием статического флага.

class MyComponent implements AfterViewChecked {
    private static VIEW_LOADED = false;
    @ViewChildren('things') viewChildren: QueryList<AnotherComponent>;

    ngAfterViewChecked() {
        if (! this.viewChildren.first) {
            return;
        }

        if (! MyComponent.VIEW_LOADED) {
            MyComponent.VIEW_LOADED = true;
            setupSVG(this.viewChildren)
        }
    }
}

Я уверен, что есть лучший способ справиться с этим, какие-то идеи или вещи, которые мне здесь не хватает?

1
0
1 320
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не совсем уверен, но вам стоит попробовать использовать afterViewInit () вашего дочернего компонента здесь? В документации сказано, что ваши ViewChildren устанавливаются после afterViewInit () вашего компонента: https://angular.io/api/core/ViewChildren

Вы должны попробовать что-нибудь с @Output из вашего дочернего компонента.

Пожалуйста. Дайте мне знать, если у вас будут результаты.

Yesub 11.04.2018 14:31

Другие вопросы по теме