web-dev-qa-db-fra.com

Angular 8 viewChild renvoie undefined

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.

17
Nesan Mano

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.

1
Jesse