Dalam kebanyakan kasus, Anda ingin menggunakannya {static: false}
. Menyetelnya seperti ini akan memastikan kecocokan permintaan yang bergantung pada resolusi yang mengikat (seperti arahan struktural *ngIf, etc...
) akan ditemukan.
Contoh kapan harus menggunakan 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;
}
Ini static: false
akan menjadi perilaku fallback default di Angular 9. Baca lebih lanjut di sini dan di sini
The { static: true }
pilihan diperkenalkan untuk mendukung menciptakan tertanam pandangan dengan cepat. Ketika Anda membuat tampilan secara dinamis dan ingin mengaksesnya TemplateRef
, Anda tidak akan dapat melakukannya ngAfterViewInit
karena akan menyebabkan ExpressionHasChangedAfterChecked
kesalahan. Mengatur flag statis menjadi true akan membuat tampilan Anda di ngOnInit.
Namun:
Dalam kebanyakan kasus lain, praktik terbaik adalah menggunakan {static: false}
.
Perlu diketahui juga bahwa { static: false }
opsi akan dibuat default di Angular 9. Yang berarti bahwa pengaturan flag statis tidak lagi diperlukan, kecuali jika Anda ingin menggunakan static: true
opsi.
Anda dapat menggunakan ng update
perintah clari sudut untuk secara otomatis meningkatkan basis kode Anda saat ini.
Untuk panduan migrasi dan informasi lebih lanjut tentang ini, Anda dapat memeriksa di sini dan di sini
Apa perbedaan antara permintaan statis dan dinamis?
Opsi statis untuk kueri @ViewChild () dan @ContentChild () menentukan kapan hasil kueri tersedia.
Dengan kueri statis (statis: benar), kueri diselesaikan setelah tampilan dibuat, tetapi sebelum deteksi perubahan berjalan. Hasilnya, bagaimanapun, tidak akan pernah diperbarui untuk mencerminkan perubahan pada pandangan Anda, seperti perubahan ke ngIf dan ngFor blok.
Dengan kueri dinamis (statis: salah), kueri diselesaikan setelah ngAfterViewInit () atau ngAfterContentInit () untuk masing-masing @ViewChild () dan @ContentChild (). Hasilnya akan diperbarui untuk perubahan pada tampilan Anda, seperti perubahan ke ngIf dan ngFor blok.