2017-07-04 20 views
5

Ne küresel angular2 özel bir olayı yayarlar ister ve benim olay kaynağı bileşeninde öyle değil sadece ebeveyn-çocuk desenYayan olaylar küresel

dinlemek birden çok bileşeni kalmamış olacaktır ulaşmak için çalışıyorum, ben

export class EventSourceComponent{ 

    @Output() testev = new EventEmitter(); 

    onbtnclick(){ 
    this.testev.emit("i have emitted an event") 
    } 
} 

Şimdi bu olay yukarıda elde nasıl

export class CmpTwoComponent{ 

    //here get the emitted event with data 
    } 

almak için diğer bileşenleri istersiniz?

cevap

3

Bunun için paylaşılan bir hizmet kullanabilirsiniz.

export class EventSourceComponent{ 
    constructor(private sharedService : SharedService){} 


     onbtnclick(){ 
     this.sharedService.testev.next("i have emitted an event") 
     } 
} 

export class CmpTwoComponent{ 

//here get the emitted event with data 

    constructor(sharedService : SharedService){ 

     sharedService.testev.subscribe((event)=>{console.log(event)}) 
    } 

} 

ve hala bu yüzden ebeveyn bileşeni normal abone mümkün olabilir Output gerekiyorsa o zaman sharedService, Açıkçası

@Injectable() 
export class SharedService{ 

    public testev = new Subject() 

} 

olurdu, bunu da ekleyebilirsiniz:

export class EventSourceComponent{ 

    @Output() testev = new EventEmitter(); 
    constructor(private sharedService : SharedService){} 


     onbtnclick(){ 
     this.testev.emit("i have emitted an event") 
     this.sharedService.testev.next("i have emitted an event") 
     } 
} 
+0

Hizmetleriniz içinde 'EventEmitter' kullanılmamalıdır; https://stackoverflow.com/questions/36076700/what-is-the-proper-use-of-an-eventemitter. Bunun yerine "Gözlemlenebilir"/"Konu" kullanın. – echonax

+0

Müthiş milad teşekkürler –

1

Açısal olarak, istediğiniz şeyi elde etmenizi sağlayan bir desen yoktur.

Sizin için düşünebileceğim en iyi seçenek, özel bir hizmet oluşturmak olacaktır. AppComponent içine enjekte ettiğiniz bazı hizmetleri yapın (bu nedenle, hizmetin tek bir örneğini bulundurun). Serviste, istediğiniz mantığa sahip olabilirsiniz.

+0

Küresel 2 genel açılar için, şu adrese bakmak isteyebilirsiniz: https://modewagon.wordpress.com/2017/09/12/angular2-4-global-events/ –