TL; DR :
Không, không đăng ký thủ công với họ, không sử dụng chúng trong các dịch vụ. Sử dụng chúng như được hiển thị trong tài liệu chỉ để phát ra các sự kiện trong các thành phần. Đừng đánh bại sự trừu tượng của góc cạnh.
Câu trả lời:
Không, bạn không nên đăng ký thủ công với nó.
EventEuctor là một bản tóm tắt angular2 và mục đích duy nhất của nó là phát ra các sự kiện trong các thành phần. Trích dẫn một bình luận từ Rob Wormald
[...] EventEuctor thực sự là một sự trừu tượng hóa góc cạnh và chỉ được sử dụng khá nhiều để phát ra các Sự kiện tùy chỉnh trong các thành phần. Mặt khác, chỉ sử dụng Rx như thể nó là bất kỳ thư viện khác.
Điều này được nêu thực sự rõ ràng trong tài liệu của EventEuctor.
Sử dụng bởi các chỉ thị và các thành phần để phát ra các Sự kiện tùy chỉnh.
Có gì sai khi sử dụng nó?
Angular2 sẽ không bao giờ đảm bảo với chúng tôi rằng EventEuctor sẽ tiếp tục là một vật quan sát được. Vì vậy, điều đó có nghĩa là tái cấu trúc mã của chúng tôi nếu nó thay đổi. API duy nhất chúng ta phải truy cập là emit()
phương thức của nó . Chúng ta không bao giờ nên đăng ký thủ công vào EventEuctor.
Tất cả những điều đã nêu ở trên rõ ràng hơn trong bình luận của Ward Bell này (nên đọc bài báo và câu trả lời cho nhận xét đó). Trích dẫn để tham khảo
KHÔNG được tính vào EventEuctor tiếp tục là một Quan sát!
KHÔNG dựa vào những nhà khai thác quan sát được trong tương lai!
Những thứ này sẽ bị loại bỏ sớm và có thể được gỡ bỏ trước khi phát hành.
Chỉ sử dụng EventEuctor để liên kết sự kiện giữa thành phần con và thành phần cha. Đừng đăng ký nó. Đừng gọi bất kỳ phương pháp nào. Chỉ gọieve.emit()
Nhận xét của ông phù hợp với nhận xét của Rob từ lâu.
Vậy, làm thế nào để sử dụng đúng cách?
Đơn giản chỉ cần sử dụng nó để phát ra các sự kiện từ thành phần của bạn. Hãy xem một ví dụ sau đây.
@Component({
selector : 'child',
template : `
<button (click)="sendNotification()">Notify my parent!</button>
`
})
class Child {
@Output() notifyParent: EventEmitter<any> = new EventEmitter();
sendNotification() {
this.notifyParent.emit('Some value to send to the parent');
}
}
@Component({
selector : 'parent',
template : `
<child (notifyParent)="getNotification($event)"></child>
`
})
class Parent {
getNotification(evt) {
// Do something with the notification (evt) sent by the child!
}
}
Làm thế nào để không sử dụng nó?
class MyService {
@Output() myServiceEvent : EventEmitter<any> = new EventEmitter();
}
Dừng lại ở đó ... bạn đã sai ...
Hy vọng rằng hai ví dụ đơn giản này sẽ làm rõ cách sử dụng hợp lý của EventEuctor.