ViewChild возвращает значение undefined

Я использую дизайн материалов и Angular 5. Я пытался использовать загрузчик материалов, поэтому при запуске навигации показывал загрузчик, а когда он заканчивался, удалял загрузчик в соответствии с ответом в этот вопрос. Я пробовал viewchild от

<mat-progress-bar #spinnerElement [mode]="'indeterminate'" [color]="'primary'"></mat-progress-bar>

и вызвал мой конструктор компонентов, как показано ниже:

@ViewChild('spinnerElement')
spinnerElement: ElementRef;

constructor(
.....
    private ngZone: NgZone,
    private renderer: Renderer) {
        console.log(this.spinnerElement, 'spinnerElement');
    }

Но консоль всегда возвращает undefined. Немного новичок в Angular. Есть идеи, почему, ребята?


person chewi    schedule 30.11.2017    source источник


Ответы (2)


Взгляните на угловой жизненный цикл.

Вы не можете получить доступ к своим элементам DOM в своем конструкторе, потому что они все еще не отображаются.

Попробуйте получить доступ к вашему 'spinnerElement' в вашем ngOnInit().

нгонинит():

Инициализируйте директиву/компонент после того, как Angular сначала отобразит свойства, связанные с данными, и установит входные свойства директивы/компонента. Вызывается один раз, после первого вызова ngOnChanges().

person Gili Yaniv    schedule 30.11.2017

Доступ к @ViewChild в ngOnInit(). Вы не можете использовать его, пока он не будет инициализирован.

person Saurabh Agrawal    schedule 30.11.2017
comment
Нет, это недоступно в ngOnInit, вам нужно дождаться хотя бы ngAfterViewInit() - person Gnujeremie; 25.01.2018