EventEmitterの適切な使用法は何ですか? 質問する

EventEmitterの適切な使用法は何ですか? 質問する

私は次のような質問を読んだことがありますCustomHttp 内の EventEmitter サービスにアクセスするユーザーはサービスでEventEmitterを使用していますが、このコメントそれを使用せず、代わりにサービス内で Observables を直接使用します。

私もこれを読んだ質問ここでの解決策は、EventEmitter を子に渡してサブスクライブすることを提案しています。

そこで質問です。EventEmitter を手動でサブスクライブするべきでしょうか、それともしないべきでしょうか? どのように使用すればよいでしょうか?

ベストアンサー1

TL;DR :

いいえ、手動でサブスクライブしたり、サービスで使用したりしないでください。ドキュメントに示されているように、コンポーネントでイベントを発行するためだけに使用してください。Angular の抽象化を無効にしないでください。

答え:

いいえ、手動で購読しないでください。

イベントエミッターはAngular2の抽象化であり、その唯一の目的はコンポーネント内でイベントを発行することです。コメントロブ・ワーマルドより

[...] EventEmitter は実際には Angular の抽象化であり、コンポーネントでカスタム イベントを発行する場合にのみ使用する必要があります。それ以外の場合は、Rx を他のライブラリと同じように使用します。

これは、EventEmitter のドキュメントに明確に記載されています。

ディレクティブとコンポーネントを使用してカスタム イベントを発行します。

それを使用することの何が問題なのですか?

Angular2 では、EventEmitter が今後も Observable であり続けることは保証されません。したがって、変更があった場合はコードをリファクタリングする必要があります。アクセスする必要がある唯一の API はそのemit()メソッドです。EventEmitter に手動でサブスクライブしないでください。

上記のすべては、このウォード・ベルのコメント(記事を読むことをお勧めします、そして答えそのコメントに。参考までに引用

EventEmitter が Observable であり続けることを期待しないでください。

これらの Observable 演算子が将来も存在すると期待しないでください。

これらはまもなく廃止され、リリース前に削除される可能性があります。

EventEmitterは、子コンポーネントと親コンポーネント間のイベントバインディングにのみ使用してください。EventEmitterをサブスクライブしないでください。これらのメソッドを呼び出さないでください。eve.emit()

彼のコメントはずっと前のロブのコメントと一致しています。

では、どのように正しく使用すればいいのでしょうか?

これを使用して、コンポーネントからイベントを発行するだけです。次の例をご覧ください。

@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!
    }
}

どうやって使わないのですか?

class MyService {
    @Output() myServiceEvent : EventEmitter<any> = new EventEmitter();
}

そこまでで止めてください...あなたはすでに間違っています...

これら 2 つの簡単な例により、EventEmitter の適切な使用方法が明確になると思います。

おすすめ記事