Angular 角度组件:我可以使用可观察的EventEmitter代替@Output()属性吗?
[第2.4.5条] 我试过了,它似乎像一个事件发射器:Angular 角度组件:我可以使用可观察的EventEmitter代替@Output()属性吗?,angular,rxjs,eventemitter,Angular,Rxjs,Eventemitter,[第2.4.5条] 我试过了,它似乎像一个事件发射器: 我的组件来自外部: 组件内部: @Output()VisibleTransitionId:可观察 观察员:观察员; 构造函数(){ const myObs=新的可观察对象(observer=>this.observer=observer); this.visibleTransitionEnd=myObs .map(x=>'>'+x+'EventEmitter只是扩展了Subject,所以这并不奇怪(我在Dart中也看到了这一点) 他们
- 我的组件来自外部:
- 组件内部:
@Output()VisibleTransitionId:可观察 观察员:观察员; 构造函数(){ const myObs=新的可观察对象(observer=>this.observer=observer); this.visibleTransitionEnd=myObs
.map(x=>'>'+x+'
只是扩展了EventEmitter
,所以这并不奇怪(我在Dart中也看到了这一点) 他们使用自己的类,以便以后能够在不破坏现有代码的情况下修改实现Subject
因此,避免这种抽象可能不是最好的办法。如果你意识到缺点并愿意接受它,你当然可以这样做。好吧,在你的情况下,你可以使用
或EventEmitter
。你可以看到Subject
就像EventEmitter
(尽管建议尽可能使用Subject
)EventEmitter
(或Observable.create
)不打算这样使用。内部函数应该向观察者发出值并返回一个分解函数(释放资源或其他)。不作为属性保留。new Observable()
但是,我不确定它可能会产生什么后果(内存泄漏?) 因此,请使用
:主题
导出类SplitComponent实现OnDestroy{ @Output()VisibleTransitionId:可观察 visibleTransitionEndObserver:主题; 构造函数(){ 常量主题=新主题(); this.visibleTransitionEnd=subject.asObservable()
.map(x=>'>'+x+'2个选择EventEmitter的原因- Angular
可以确保在需要时异步交付事件。这有利于响应用户体验EventEmitter
- 封装underline实现。如果有一天,Angular的下一个版本将更新事件绑定,该绑定依赖于
Angular
的一些新内容。如果EventEmitter
被广泛使用,这将是项目的灾难。对此不确定。但应该避免主题
扩展了RxJSEventEmitter
到目前为止只有3种方法:1)Subject
,2)constructor()
和3)新方法subscribe(下一步,错误,完成)
如果您emit(值){super.next(值);}
,它将异步传递事件新建EventEmitter(true)
构造函数(isAsync=false){ 超级(); 这个。uu isAsync=isAsync; }
根据EventEmitter.subscribe()
我想指出使用Observable for output接口的一个优点是 你基本上可以加入任何你想要的可观察到的东西 因此,假设您有一个事件,该事件只有在表单有效并传递值时才会触发 对于事件发射器,您必须定义额外的发射器实例来处理它这一点对async传递事件做了一些事情。\u isAsync
使用Observable作为事件发射,您可以简单地做到这一点@Output validValue = new EventEmitter() this.form.valueChanges.pipe(tap(value=>{ if(ths.form.valid) validValue.emit(value) })).subscribbe()
@Output() validValue=this.form.valueChanges.pipe(filter(_=>this.form.valid))
thx,我已经更新了我的plunker的以下答案,它与
配合得很好,没有添加主题
操作符,为什么要添加它?@bertrandg看到了,你知道它是否可以使用。publishReplay/publish+refCount并将其标记为@Output?我不知道,但应该不难找到。打开了一个功能请求以一种未来安全的方式将可观察对象公开为输出属性:可能重复可观察的
- Angular