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 is undefinedと表示されています。
Angular 7。
私の新しい知識によれば、@ viewChildはstaticというフラグをとります。フラグをtrueに設定すると、親コンポーネントは自身の作成中にchildViewへの参照を取得しようとします。つまり、親ComponentのonInit()メソッドにchildViewのインスタンスを含めることができます。他のメソッドではアクセスできないため、基本的には1回限りのアクセスです。
フラグをfalseに設定すると、基本的にivyレンダラーの新しい方法になります。
私の場合の問題は、どちらのオプションも機能していないことです。
docs によると、メタデータプロパティreadは次のとおりです。
`read - read a different token from the queried elements.`
つまり、通常のViewContainerRef
(ElementRef
を省略した場合のデフォルト)ではなく、read
またはコンポーネント名を読み込む場合に使用されます。したがって、値としてtrue
を置くことは、要素から型true
を返すように言っています。これは、私の知る限りでは不可能です。
より良い説明は here ですが、問題に対する簡単な答えは、read
プロパティを取得するか、ElementRef
または必要な特定のタイプを指定することです。