2016-02-20 28 views
5

benim yapıcı içinde kurulum için bir bileşeni üzerinde bir dize özelliğini isteyen ediyorum, ama buEğik 2 pas parametreleri DI istisna

@Component({ 
    selector: 'wg-app', 
    templateUrl: 'templates/html/wg-app.html' 
}) 
export class AppComponent { 

    constructor(private state:string = 'joining'){ 

    } 
} 

gibi bir şey denediğimde DI istisna olsun atar

EXCEPTION: No provider for String! (AppComponent -> String) 

Açıkçası, enjektör bir 'string' sağlayıcı bulmaya çalışıyor ve bulamıyor.

Bu tür bir şey için ne tür bir desen kullanmalıyım? Örneğin. başlangıç ​​parametrelerini bir bileşene geçirme.

Kaçınılması gerekenler nelerdir? İlk dizgiyi enjekte etmeli miyim?

cevap

15

@Input() özelliklerini kullanabilirsiniz.

<my-component [state]="'joining'"></my-component> 

export class AppComponent { 
    @Input() state: string; 
    constructor() { 
    console.log(this.state) // => undefined 
    } 
    ngOnInit() { 
    console.log(this.state) // => 'joining' 
    } 
} 

Oluşturucu genellikle sadece DI için kullanılmalıdır ...

Ama gerçekten, gerçekten gerekiyorsa enjektabl değişken (plunker) oluşturabilirsiniz:

let REALLY_IMPORTANT_STRING = new OpaqueToken('REALLY_IMPORTANT_STRING'); 
bootstrap(AppComponent, [provide(REALLY_IMPORTANT_STRING, { useValue: '!' })]) 

export class AppComponent { 
    constructor(@Inject(REALLY_IMPORTANT_STRING) public state: REALLY_IMPORTANT_STRING) { 
    console.log(this.state) // => ! 
    } 
} 

En basit seçenek sadece ayarlamaktır sınıf özelliği:

export class AppComponent { 
    private state:string = 'joining'; 
    constructor() { 
    console.log(this.state) // => joining 
    } 
} 

@Mark işaret etti, başka bir ption bir hizmeti kullanmaktır:,

export class AppService { 
    public state:string = 'joining'; 
} 
export class AppComponent { 
    constructor(private service: AppService) { 
    console.log(this.service.state) // => joining 
    } 
} 
+0

Evet Eğer düzenli sınıf gibi bir Bileşeni tedavi edilmemelidir gibi görünüyor –

+0

Eh öyle değil normal bir sınıf (: Bazı düzenli şeyler yapabilirsiniz özel sınıf var: P – Sasxa

+0

Heh evet, bir dizgeyi geçirmenin mümkün olabileceği gibi ileriye doğru bir şey gibi hissediyorum. Şablonumu –