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: false
va ê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 ngAfterViewInit
car cela entraînera une ExpressionHasChangedAfterChecked
erreur. 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: true
option.
Vous pouvez utiliser la ng update
commande 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.