Çoğu durumda kullanmak isteyeceksiniz {static: false}
. Bunun böyle ayarlanması, bağlayıcı çözünürlüğe (yapısal yönergeler gibi *ngIf, etc...
) bağlı olan sorgu eşleşmelerinin bulunmasını sağlayacaktır.
Ne zaman kullanılacağına örnek 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: false
Daha Açısal 9. okuyun varsayılan yedek davranış olacak burada ve burada
{ static: true }
Seçenek anında gömülü görünüm oluşturma desteklemek tanıtıldı. Dinamik bir görünüm oluştururken ve öğesine erişmek istediğinizde TemplateRef
, hataya ngAfterViewInit
neden olacağı için bunu yapamazsınız ExpressionHasChangedAfterChecked
. Statik bayrağı true olarak ayarlamak, ngOnInit'te görünümünüzü oluşturur.
Yine:
Diğer çoğu durumda, en iyi uygulama kullanmaktır {static: false}
.
Bu { static: false }
seçeneğin Açısal 9'da varsayılan olarak ayarlanacağını unutmayın static: true
. Bu , seçeneği kullanmak istemediğiniz sürece statik bayrağın ayarlanmasının artık gerekli olmadığı anlamına gelir .
ng update
Geçerli kod tabanınızı otomatik olarak yükseltmek için açısal cli komutunu kullanabilirsiniz.
Bir taşıma kılavuzu ve bununla ilgili daha fazla bilgi için burayı ve buradan kontrol edebilirsiniz
Statik ve dinamik sorgular arasındaki fark nedir?
@ViewChild () ve @ContentChild () sorguları için statik seçenek, sorgu sonuçlarının ne zaman kullanılabilir olacağını belirler.
Statik sorgular (static: true) ile, görünüm oluşturulduktan sonra ancak değişiklik algılama çalışmadan önce sorgu çözülür. Ancak sonuç, ngIf ve ngFor bloklarındaki değişiklikler gibi görünümünüzdeki değişiklikleri yansıtacak şekilde asla güncellenmeyecektir.
Dinamik sorgularla (statik: false), sorgu @ViewChild () ve @ContentChild () için sırasıyla ngAfterViewInit () veya ngAfterContentInit () sonrasında çözümlenir. Sonuç, görünümünüzdeki ngIf ve ngFor bloklarındaki değişiklikler gibi değişiklikler için güncellenecektir.