Angular 8 viewChild возвращает неопределенное - PullRequest
3 голосов
/ 04 июня 2019

Я пытаюсь получить доступ к экземпляру childView, но он продолжает говорить, что childView не определен.

Вот мой код для childViews:

@ViewChild(CreateQuestionnaireComponent,{ read: true, static: false })  private childQuestionnaireDialog:CreateQuestionnaireComponent;
@ViewChild(ProjectNavbarComponent,{ read: true, static: false })  private childProjectNavBar:ProjectNavbarComponent;
@ViewChild(QuestionnaireNodeComponent,{ read: true, static: false }) private childQuestionnaireNode:QuestionnaireNodeComponent;
....

onCreateTerminal() {
        this.childQuestionnaireDialog.generateQuestionnaireDropDownList();
        this.childQuestionnaireDialog.resetFields();
        this._hideQuestionnaireDialog = false;
        this._modalTitle = 'New Terminal';
        this._placeHolderText = 'Terminal Questionnaire Title';
        this._terminal = true;
    }

...

Там написано: this.childQuestionnaireDialog не определено ".

Он работал с Angular 7.

Согласно моим новым знаниям, @viewChild принимает флаг с именем static. Если мы поместимПри значении true родительский компонент пытается получить ссылку на childView во время своего собственного создания. Другими словами, у нас может быть экземпляр childView в методе onInit () родительского компонента. В основном это однократный доступ, потому что мыЯ не смогу получить доступ ни к каким другим методам.

Флаг, установленный в false, по сути является новым способом в ivy renderer.

Проблема в моем случае, ни один из параметров не работает.

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Согласно документам свойство метаданных read равно:

`read - read a different token from the queried elements.`

Другими словами, он используется, если вы хотите прочитать ViewContainerRef или имя компонента вместо обычного ElementRef (что по умолчанию, если вы пропустите read). Таким образом, указание true в качестве значения означает возвращение типа true из элемента, что, насколько я знаю, невозможно.

Гораздо лучшим объяснением является здесь , но краткий ответ на вашу проблему заключается в том, чтобы взять свойство read или указать ElementRef или определенный тип, который вы хотите.

0 голосов
/ 01 июля 2019

У меня была похожая проблема, когда компонент ViewChild не определен в методе onInit ().

Исправлена ​​ошибка :

// Ensure Change Detection runs before accessing the instance
@ContentChild('foo', { static: false }) foo!: ElementRef;

// If you need to access it in ngOnInit hook
@ViewChild(TemplateRef, { static: true }) foo!: TemplateRef;
...