typescript - Genel veya özel - Angular 2 bileşen sınıfı yöntemleri karışıklığı
Bileşen sınıfında hangi yöntemlerin özel, hangilerinin genel olması gerektiğini anlamakta zorlanıyorum.
Hizmette yöntemin açık mı yoksa özel mi olduğunu değerlendirmek oldukça kolay görünüyor, örneğin:
export class MyServiceClass {
private _cache = {}; // this value is private and shouln't be accessed from outside
public accessCache(){ // it's public as it's an API method
return this._cache;
}
public setCache(newVal){
this._cache = newVal;
}
}
Bu mantığı takip edersek, bileşendeki tüm yöntemler özel olmalıdır çünkü hiçbir yöntemin sınıfın dışına açılmaması gerekir. (o gönderiye göre bileşen ve görünümü tek bir varlıktır)
export class MyComponent {
private _getRandomNumbers(){ // this is used in view only
/*..*/
}
}
Hiçbir trajedi yok ama bu videoda, bileşenin yalnızca genel (public) yöntemlerinin birim testine tabi tutulması gerektiğini öğrenebilirsiniz. Yukarıdakileri takip ederek, bileşen sınıfında genel yöntemlere sahip olmanın hiçbir nedenini bulamıyorum ama yine de test etmeye değer bazı yöntemlerim var (özellikle görünümde kullanılan yöntemler). Bu, Angular dünyasında özel (private) ve genel (public) yöntemlerin anlamını tamamen kaybettiğim anlamına geliyor.
Yani sorum basit:
Bileşenlerde hangi yöntemlerin genel (public) ve özel (private) olarak işaretlenmesi gerektiği.
Cevap #1
Bileşen Sınıfında, her şeyi public olarak ayarlardım (eğer erişim belirleyici yoksa, varsayılan olarak publictir).
Normal durumda, bir bileşen sınıfını genişletmeyiz, bu nedenle, benim düşünceme göre, erişim belirteci gerekli değildir.
Bir bileşeni miras aldığımız durumlar vardır. Angular 2'de bileşen mirasına buradan bakabilirsiniz. Ancak, bu durumlarda bile erişim belirleyici gerekli olmayabilir.
...
export class MyComponent {
// injected service as private
constructor(private _randomSvc: RandomService) {}
getRandomNumbers(){ } // leave it as public
@Input()
myInput: string; // leave it as public
@Output()
myOutput; // leave it as public
}
Unutmayın, Javascript’in kendisinin HİÇBİR erişim belirleyicisi yoktur. Erişim belirleyicisi sadece geliştirme sırasında (IDE) uygulanabilir. Belirleyici bazı durumlarda faydalı olsa da, kullanımını en aza indirmenizi öneririm.
