W większości przypadków będziesz chciał użyć {static: false}. Ustawienie tego w ten sposób zapewni dopasowanie do zapytań, które zależą od rozdzielczości wiązania (jak dyrektywy strukturalne *ngIf, etc...).
Przykład zastosowania 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;
}
static: falseBędzie domyślne zachowanie awaryjna w Kątowymi 9. Czytaj więcej tutaj i tutaj
{ static: true }Opcja została wprowadzona w celu wspierania tworzenia osadzonych poglądy na bieżąco. Gdy tworzysz widok dynamicznie i chcesz uzyskać do niego dostęp TemplateRef, nie będziesz w stanie tego zrobić, ngAfterViewInitponieważ spowoduje to ExpressionHasChangedAfterCheckedbłąd. Ustawienie flagi statycznej na true spowoduje utworzenie widoku w ngOnInit.
Niemniej jednak:
W większości innych przypadków najlepszą praktyką jest użycie {static: false}.
Pamiętaj jednak, że { static: false }opcja zostanie ustawiona jako domyślna w Angular 9. Co oznacza, że ustawienie flagi statycznej nie jest już konieczne, chyba że chcesz użyć tej static: trueopcji.
Możesz użyć polecenia kątowego cli, ng updateaby automatycznie zaktualizować bieżącą bazę kodu.
Aby uzyskać przewodnik migracji i dodatkowe informacje na ten temat, możesz sprawdzić tutaj i tutaj
Jaka jest różnica między zapytaniami statycznymi a dynamicznymi?
Opcja statyczna dla zapytań @ViewChild () i @ContentChild () określa, kiedy wyniki zapytania będą dostępne.
W przypadku zapytań statycznych (static: true) zapytanie jest rozwiązywane po utworzeniu widoku, ale przed uruchomieniem wykrywania zmian. Jednak wynik nigdy nie będzie aktualizowany, aby odzwierciedlić zmiany w twoim widoku, takie jak zmiany bloków ngIf i ngFor.
W przypadku zapytań dynamicznych (static: false) zapytanie jest rozwiązywane po ngAfterViewInit () lub ngAfterContentInit () odpowiednio dla @ViewChild () i @ContentChild (). Wynik zostanie zaktualizowany o zmiany w twoim widoku, takie jak zmiany bloków ngIf i ngFor.