【发布时间】:2015-12-31 16:51:01
【问题描述】:
我有一个滑块组件,当你拖动滑块时它会发出数字,它可以像这样使用:<my-slider (change)="onSlide($event)"></my-slider>。我想摆脱onSlide 方法,而是将change 事件流绑定到Observable<number> 属性(而不是回调)。
我正在为我的@Output 使用 Angular 2 EventEmitter。 EventEmitter 继承自 RxJs Subject,即 Observable 和 Observer。我希望重用EventEmitter 的Observable 侧。
当然,我可以将通过onSlide 输入的值推送到另一个Subject,但我希望避免这种样板和开销。有什么办法吗?
【问题讨论】:
-
你可以做
(change)="myOutput.emit($event)"。假设我理解正确。 -
这样可以节省回调的样板文件(太棒了)。我仍然需要从一个主题复制到下一个主题。
-
你可以把你的 EventEmitter 放在一个服务中,让你的组件调用服务上的 API/方法来触发/
emit()事件,所有订阅者都会收到通知。所以没有抄袭。这是an example。 -
好主意,但这并不能减少样板文件,也不能与多个组件一起使用,因为服务是单例的。也许我可以解决一些问题,但这会破坏 angular api。我更喜欢 Eric 的方式,反正不会造成太多开销。
-
@LodewijkBogaards 您找到更好的方法了吗?没有任何样板代码或复制到不同的主题。