2016-03-31 24 views
2

İki paralel yönergeye sahibim (ebeveyn-çocuğa verildiği gibi) ve mümkünse gözlemlenebilir kullanarak bir hizmet aracılığıyla iletişim kurmasını istiyorum. official component interaction guidline'u okudum, ancak ebeveyn-çocuk etkileşimi hakkında konuşuyor. İki direktifle bir plunker yapmayı denedim ama işe yaramıyor. >Köşeli 2 Bileşen Bir hizmet aracılığıyla Etkileşim

export class DirService { 
    contentSource = new Subject(); 
    content$ = this.contentSource.asObservable(); 
} 

Ve sonra, < dir1 arasında bir köprü yapmak için bu hizmeti kullanmak> ve < dir2:

Temelde, istediğim bir hizmeti yaratmaktır. Birisi bu senerio'nun nasıl uygulanacağına işaret edebilir mi?

  • ben this thread içinde post okuyun:

    Btw, Ben esas olarak gözlemlenebilir kullanmayı tercih etmektedir.

  • Birçok direktifin iletişim kurmasını istiyorsam, gözlemlenebilirlik mantığı daha açık hale getirebilir.

Teşekkürler!

bootstrap(AppComponent, [ DirService ]); 

Ve bileşen sağlayıcıları özniteliği çıkarın:

@Component({ 
    (...) 
    //providers: [ DirService ] 
}) 

için aynı hizmet örneğini paylaşacak Bu şekilde

cevap

5

Daha sonra her bileşen için yeni bir örnek korunur. Paylaşılan bir hizmet almak için ya yalnızca bootstrap(AppComponent, [DirService]) ya da kök bileşenini ve paylaşılan hizmetin kapsamını tanımlayan bileşenlerin ve yönergelerin ortak atalarını ekleyin.
Bu şekilde her soydaş, aynı örneği alır. AngularJs 2 - multiple instance of service created
- - How to use Dependency Injection (DI) correctly in Angular2?

+1

thx

Plunker example

da
bakınız! Ve işte çalışıyor [plunker] (http://plnkr.co/edit/5PQ9AmbfNVDHfWIW54mN?p = önizleme) tavsiyenize dayalı ortak atayı kullanarak. – lys1030

+1

İyi dedi! Teşekkürler! –

1

Başvurunuzu işe koşulması zaman DirService hizmet belirtmeniz gerekir tüm uygulama (ve her iki bileşen).

Bu plunkr bakın: http://plnkr.co/edit/rYq3iicbd4mKGyxHlJmg?p=preview.

Bu davranış, Angular2 bağımlılık enjeksiyonunun "hiyerarşik enjektörleri" ile bağlantılıdır.

fazla ayrıntı için, bu soruya bir göz olabilir: Eğer her bir bileşenin

@Component({ 
    selector: 'dir2', 
    template: '{{field}}', 
    providers: [DirService] 
}) 

ait providers için "ortak" hizmetini eklerseniz

İlgili konular