2017-07-04 17 views
5

gì đang cố gắng để đạt được là tôi muốn phát ra một sự kiện tùy chỉnh trong angular2 trên toàn cầu và có nhiều thành phần nghe nó vì vậy không chỉ là mô hình mẹ-consự kiện Xả toàn cầu

Trong thành phần nguồn sự kiện tôi, tôi có

export class EventSourceComponent{ 

    @Output() testev = new EventEmitter(); 

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

Bây giờ tôi muốn các thành phần khác để có được sự kiện này

export class CmpTwoComponent{ 

    //here get the emitted event with data 
    } 

làm thế nào để đạt được nêu trên?

Trả lời

3

Bạn có thể sử dụng dịch vụ được chia sẻ cho điều đó.

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)}) 
    } 

} 

và sau đó là sharedService sẽ

@Injectable() 
export class SharedService{ 

    public testev = new Subject() 

} 

Rõ ràng, nếu bạn vẫn cần Output nên thành phần cha mẹ có thể có khả năng đăng ký bình thường, bạn có thể thêm rằng quá:

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

Bạn không nên sử dụng 'EventEmitter' bên trong dịch vụ của mình; https://stackoverflow.com/questions/36076700/what-is-the-proper-use-of-an-eventemitter. Thay vào đó, hãy sử dụng 'Chủ đề '/' Chủ đề'. – echonax

+0

Cảm ơn bạn rất tuyệt vời –

1

Không có mẫu nào trong Angular cho phép bạn đạt được những gì bạn yêu cầu.

Tùy chọn tốt nhất mà tôi có thể nghĩ đến cho bạn là tạo dịch vụ tùy chỉnh. Thực hiện một số dịch vụ mà bạn đưa vào AppComponent (do đó có một trường hợp duy nhất của dịch vụ). Trong Dịch vụ, bạn có thể có bất kỳ logic nào bạn muốn.

+0

Đối với các sự kiện toàn cầu ở góc 2, bạn có thể xem xét điều này: https://modewagon.wordpress.com/2017/09/12/angular2-4-global-events/ có thể trợ giúp –

Các vấn đề liên quan