Bir değişken beyan edilirse
private Bir bileşen sınıfında, bu bileşenin şablonuna erişebilmeli miyim?
@Component({
selector: 'my-app',
template: `
<div>
<h2>{{title}}</h2>
<h2>Hello {{userName}}</h2> // I am getting this name
</div>
`,
})
export class App {
public title = 'Angular 2';
private userName = "Test Name"; //declared as private
}
Düzenleme: Bu cevap artık yanlış. Yayınladığımda konuyla ilgili resmi bir yönlendirme yoktu, ancak Yaroslov'un (mükemmel ve doğru) cevabında açıklandığı gibi, bu artık geçerli değil: Codelizer şimdi uyarıyor ve bileşen şablonlarındaki özel değişkenlere yapılan referanslarda AoT derlemesi başarısız oluyor. . Bu, kavramsal bir düzeyde, burada her şeyin geçerli olduğunu söyledi, bu yüzden bu cevabı faydalı göründüğü gibi bırakacağım.
Evet, bu bekleniyor.
Unutmayın ki
private ve diğer erişim düzenleyicileri, Türler yapılarıdır; Bileşen / denetleyici / şablon ise, Türnün hiçbir şey bilmediği açısal yapılardır. Erişim değiştiricileri kontrol görünürlüğü arasında sınıflar: Bir alan yaratmak
private önler diğer sınıflar ona erişmekten, ancak şablonlar ve denetleyiciler var olan şeylerdir içinde sınıflar.
Bu teknik olarak doğru değil, (sınıfların dekoratörlerle ve meta verilerle nasıl ilişkili olduğunu anlamak yerine), bu şekilde düşünmek yararlı olabilir, çünkü önemli olan şey (IMHO) şablon ve denetleyici hakkındaki düşünceden ayrı olarak değişmektir. Bileşenleri Bileşen yapısının birleşik parçaları olarak düşünmeye - bu, ng2 zihinsel modelin önemli yönlerinden biridir.
Bu şekilde düşünmek, belli ki bekliyoruz
private Şablon sınıfında yer alan değişkenler şablonunda görünecek şekilde aynı sebepten dolayı görünür olmasını bekliyoruz
private Bu sınıftaki yöntemler.
Hayır, şablonlarınızda özel değişkenler kullanmamalısınız.
Ben beğendim drewmoore'un cevabı ve bunun içinde kusursuz kavramsal mantığı görüyoruz, uygulamada yanlış. Şablonlar, bileşen sınıfları içinde değil, bunların dışında bulunur. Şuna baksana bu repo kanıt için.
Çalışmanın tek nedeni, TypeScript’in
private anahtar kelime gerçekten üye özel yapmaz. Tam zamanında derleme, çalışma zamanında bir tarayıcıda gerçekleşir ve JS'nin herhangi bir özel üye kavramı yoktur (henüz?). Kredi gider Sander Elias Beni doğru yola koyduğun için.
İle
ngc ve Önde Gelen derleme, şablonun özel üyelerine erişmeye çalışırsanız hata alırsınız. Klon gösteri repo, değişim
MyComponent Üyelerin özel görünürlükleri ve çalışırken derleme hataları alırsınız
ngc. Burada da Cevap Ahead-of-Time derleme için spesifik.
Kod örneği soruyu TipScript ile ilgili olsa bile, daktilo ile yazılmış yazı etiket. Dart için Angular2 de mevcuttur ve bu Dart için dikkate değer bir farktır.
İçinde Dart oyunu şablon özel değişkenlere referans olamazBileşen sınıfının, çünkü TypeScript'in aksine Dart, özel üyelerin dışarıdan erişimini etkin bir şekilde engeller.
Ben hala bileşen hakkında düşünmek için @drewmoores öneri ve yine de bir birim olarak şablon.
Güncelleme (TS)
Angular2 TS de özel mülklere çevrimdışı derleme erişimi daha sınırlı olacak gibi görünüyor https://github.com/angular/angular/issues/11422
Özel değişkenler, bileşen şablonunda kullanılabilir. Kılavuz için angular2 hile sayfasına bakın: https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child-setter
Künye sınıfların kamu / özel üyeleri hakkında daha ayrıntılı bir açıklama burada bulunabilir: https://www.typescriptlang.org/docs/handbook/classes.html.
Tüm üyeler varsayılan olarak Genel'dir. Genel üyelere sınıf örneği ile birlikte bileşen sınıfının dışından erişilebilir. Ancak Özel üyelere yalnızca sınıf üyesi işlevleri dahilinde erişilebilir.
Bir geçici çözüm, ts dosyasındaki özel değişkenleri ve alıcıları kullanarak olabilir.
private _userName = "Test Name";
get userName() {
return this._userName;
}
Bu iyi bir yaklaşım çünkü ts dosyası ve html bağımsız kalır. _UserName değişken adını ts dosyasında değiştirseniz bile, şablon dosyasında herhangi bir değişiklik yapmanız gerekmez.