Oradan enjekte etmek ElementRef
ve kullanmak querySelector
veya bunlara benzer bir şey yapmak yerine, görünümdeki öğelere doğrudan erişmek için açıklayıcı bir yol kullanılabilir:
<input #myname>
@ViewChild('myname') input;
eleman
ngAfterViewInit() {
console.log(this.input.nativeElement.value);
}
StackBlitz örneği
- @ViewChild () , yönerge veya bileşen türünü parametre olarak veya şablon değişkeninin adını (dize) destekler.
- @ViewChildren () aynı zamanda bir ad listesini virgülle ayrılmış liste olarak destekler (şu anda boşluğa izin verilmez
@ViewChildren('var1,var2,var3')
).
- @ContentChild () ve @ContentChildren () aynı şeyi yapar, ancak açık DOM'da (
<ng-content>
yansıtılan öğeler).
torunları
@ContentChildren()
torunları da sorgulamaya izin veren tek kişi
@ContentChildren(SomeTypeOrVarName, {descendants: true}) someField;
{descendants: true}
varsayılan olmalı ancak 2.0.0 finalinde değil ve bir hata olarak kabul
edildi Bu, 2.0.1'de düzeltildi
okumak
Bir bileşen ve yönergeler varsa, read
parametre hangi örneğin döndürüleceğini belirtmeye izin verir.
Örneğin ViewContainerRef
, varsayılan olarak dinamik olarak oluşturulan bileşenler için gerekenElementRef
@ViewChild('myname', { read: ViewContainerRef }) target;
değişiklikleri abone ol
Görünüm alt öğeleri yalnızca ngAfterViewInit()
çağrıldığında ve içerik alt öğeleri yalnızca ngAfterContentInit()
çağrıldığında ayarlanmış olsa da, sorgu sonucundaki değişikliklere abone olmak istiyorsanız,ngOnInit()
https://github.com/angular/angular/issues/9689#issuecomment-229247134
@ViewChildren(SomeType) viewChildren;
@ContentChildren(SomeType) contentChildren;
ngOnInit() {
this.viewChildren.changes.subscribe(changes => console.log(changes));
this.contentChildren.changes.subscribe(changes => console.log(changes));
}
doğrudan DOM erişimi
yalnızca DOM öğelerini sorgulayabilir, ancak bileşenleri veya yönerge örneklerini sorgulayamaz:
export class MyComponent {
constructor(private elRef:ElementRef) {}
ngAfterViewInit() {
var div = this.elRef.nativeElement.querySelector('div');
console.log(div);
}
// for transcluded content
ngAfterContentInit() {
var div = this.elRef.nativeElement.querySelector('div');
console.log(div);
}
}
keyfi olarak yansıtılan içerik edinin
Bkz. Aktarılan içeriğe erişme