2017-02-13 33 views
7

Bunu yapabilir: Bunun yerine buEğik 2: yerine yapıcı enjeksiyon Mülkiyet enjeksiyon

export class BaseComponent { 
protected config: IConfig; 

@Inject(AppConfig) protected appConfig: AppConfig; 

constructor() 
{ 
    this.config = this.appConfig.getConfig();  
} 

:

export class BaseComponent { 
config: IConfig; 

constructor(
    private appConfig: AppConfig, 
    ) 
{ 
    this.config = appConfig.getConfig();  
} 

gol yapıcı imza basitleştirmek için, bu nedenle tüm alt bileşeni değil appConfig öğelerini yapıcılarında belirtmeniz gerekir. Yani BaseComponent devralır bileşenleri şöyle görünecek şekilde:

@Component({ 
    selector: 'sport-templates', 
    templateUrl: 'templates.component.html', 
    styleUrls: [ 'templates.component.scss' ], 
    encapsulation: ViewEncapsulation.None 
}) 
export class SportTemplates extends BaseComponent implements OnInit { 

    constructor() { 
     super(); 
    } 

yerine böyle:

@Component({ 
    selector: 'sport-templates', 
    templateUrl: 'templates.component.html', 
    styleUrls: [ 'templates.component.scss' ], 
    encapsulation: ViewEncapsulation.None 
}) 
export class SportTemplates extends BaseComponent implements OnInit { 

    constructor(appConfig: AppConfig) { 
     super(appConfig); 
    } 
+0

@ açısal/çekirdek nedir? – PaladiN

+0

Sorunun yanıtını şu adreste buldum: https://stackoverflow.com/questions/42461852/angular-2-inject-service-manually Teşekkürler. –

cevap

0

Hayır bunu yapamaz. Enjeksiyon servisi kurucu çağrıldığında enjekte edilecektir.

gol yapıcı imza kolaylaştırmaktır.

yapıcı imza basitleştirmek için gerek yoktur. Okunabilirlik için bunları birden fazla satırda yazabilirsiniz.

böylece tüm alt bileşeni durumunda onların yapıcı

da sınıf olduğunu erişecek miras sadece sınıfları AppConfig belirtmeniz gerekmez için. Ancak, bileşeninizde kullanılan bileşenlerin alt bileşenini kastediyorsanız, üst öğedeki değişkenlere erişemez. Onları geçmelisin.

GÜNCELLEME Kişisel this.config hep kalıtsal bileşenleri görülebilir. SportTemplates bileşenine appConfig bileşenini yeniden enjekte etmenize gerek yoktur.

+0

Cevabınız için teşekkür ederiz. Soruma biraz açıklık ekledim. –

+0

@NikolaYankov güncellendi –

0

Bunu yapabilirsin:

myService: MyService = this.injector.get(MyService); 
constructor(private injector:Injector) {} 

Enjektör Eğer yapıcı enjeksiyon için en iyi çözümü öğrendin

+0

Çalışırken, gerçek yol gibi görünmüyor. Daha fazla bir Servis Belirleyici modeli gibi. İtiraf etmeliyim ki, bu fark azdır. – XOR