J'essaie d'accéder à l'instance childView mais il continue de dire que le childView n'est pas défini.
Voici mon code pour 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;
}
...
Il dit: this.childQuestionnaireDialog n'est pas défini ".
Il fonctionnait avec Angular 7.
Selon mes nouvelles connaissances, @viewChild prend un indicateur appelé statique. Si nous mettons l'indicateur à true, le composant parent essaie d'obtenir une référence à childView lors de sa propre création. En d'autres termes, nous pourrions avoir une instance de childView dans la méthode onInit () du Component parent. Fondamentalement, un accès unique car nous ne pourrons accéder à aucune autre méthode.
Le drapeau défini sur false est fondamentalement la nouvelle façon de rendre le lierre.
Le problème dans mon cas, aucune des options ne fonctionne.
Selon le docs , la propriété de métadonnées lue est:
`read - read a different token from the queried elements.`
En d'autres termes, il est utilisé si vous souhaitez lire ViewContainerRef
ou le nom du composant au lieu du ElementRef
normal (qui est la valeur par défaut si vous omettez read
). Donc, mettre true
comme valeur signifie retourner le type true
de l'élément, ce qui, à ma connaissance, est impossible.
Une bien meilleure explication est ici , mais la réponse courte à votre problème est de supprimer la propriété read
ou de spécifier ElementRef
ou le type spécifique que vous souhaitez.