Nella maggior parte dei casi vorrai usare {static: false}. Impostandolo in questo modo, si troveranno corrispondenze di query dipendenti dalla risoluzione vincolante (come le direttive strutturali *ngIf, etc...).
Esempio di quando usare 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;
}
Il static: falsecomportamento di fallback predefinito sarà in Angolare 9. Ulteriori informazioni qui e qui
L' { static: true }opzione è stata introdotta per supportare la creazione di viste incorporate al volo. Quando crei una vista in modo dinamico e desideri accedervi TemplateRef, non sarai in grado di farlo ngAfterViewInitpoiché provocherà un ExpressionHasChangedAfterCheckederrore. L'impostazione del flag statico su true creerà la vista in ngOnInit.
Tuttavia:
Nella maggior parte degli altri casi, è consigliabile utilizzare la migliore pratica {static: false}.
Tuttavia, tenere presente che l' { static: false }opzione verrà impostata come predefinita in Angolare 9. Ciò significa che l'impostazione del flag statico non è più necessaria, a meno che non si desideri utilizzare l' static: trueopzione.
È possibile utilizzare il ng updatecomando angular cli per aggiornare automaticamente la base di codice corrente.
Per una guida alla migrazione e ulteriori informazioni a riguardo, puoi consultare qui e qui
Qual è la differenza tra query statiche e dinamiche?
L'opzione statica per le query @ViewChild () e @ContentChild () determina quando saranno disponibili i risultati della query.
Con le query statiche (static: true), la query si risolve una volta creata la vista, ma prima che venga eseguito il rilevamento delle modifiche. Il risultato, tuttavia, non verrà mai aggiornato per riflettere le modifiche alla vista, come le modifiche ai blocchi ngIf e ngFor.
Con le query dinamiche (statiche: false), la query si risolve rispettivamente dopo ngAfterViewInit () o ngAfterContentInit () rispettivamente per @ViewChild () e @ContentChild (). Il risultato verrà aggiornato per le modifiche alla vista, come le modifiche ai blocchi ngIf e ngFor.