Dans la plupart des cas, vous voudrez utiliser {static: false}. Si vous le définissez comme ceci, les correspondances de requête qui dépendent de la résolution de liaison (comme les directives structurelles *ngIf, etc...) seront trouvées.
Exemple d'utilisation static: false:
@Component({
template: `
<div *ngIf="showMe" #viewMe>Am I here?</div>
<button (click)="showMe = !showMe"></button>
`
})
export class ExampleComponent {
@ViewChild('viewMe', { static: false })
viewMe?: ElementRef<HTMLElement>;
showMe = false;
}
Le static: falseva être le comportement de secours par défaut dans Angular 9. En savoir plus ici et ici
L' { static: true }option a été introduite pour prendre en charge la création de vues intégrées à la volée. Lorsque vous créez une vue de manière dynamique et souhaitez accéder à TemplateRef, vous ne pourrez pas le faire ngAfterViewInitcar cela entraînera une ExpressionHasChangedAfterCheckederreur. La définition de l'indicateur statique sur true créera votre vue dans ngOnInit.
Néanmoins:
Dans la plupart des autres cas, la meilleure pratique consiste à utiliser {static: false}.
Sachez cependant que l' { static: false }option sera définie par défaut dans Angular 9. Ce qui signifie que la définition de l'indicateur statique n'est plus nécessaire, sauf si vous souhaitez utiliser l' static: trueoption.
Vous pouvez utiliser la ng updatecommande angular cli pour mettre à niveau automatiquement votre base de code actuelle.
Pour un guide de migration et encore plus d'informations à ce sujet, vous pouvez consulter ici et ici
Quelle est la différence entre les requêtes statiques et dynamiques?
L'option statique pour les requêtes @ViewChild () et @ContentChild () détermine quand les résultats de la requête deviennent disponibles.
Avec les requêtes statiques (static: true), la requête se résout une fois la vue créée, mais avant l'exécution de la détection des modifications. Le résultat, cependant, ne sera jamais mis à jour pour refléter les modifications apportées à votre vue, telles que les modifications apportées aux blocs ngIf et ngFor.
Avec les requêtes dynamiques (statiques: false), la requête est résolue après ngAfterViewInit () ou ngAfterContentInit () pour @ViewChild () et @ContentChild () respectivement. Le résultat sera mis à jour pour les modifications apportées à votre vue, telles que les modifications apportées aux blocs ngIf et ngFor.