是否需要基于控制取消订阅事件。
\n\nHTML 输入:
\n\n const blur$ = fromEvent(formEle, 'blur').subscribe(x => {\n this.focused = false;\n });\nRun Code Online (Sandbox Code Playgroud)\n\n表格组:
\n\n const valChanges$ = this.fGroupRef.get('first_name').valueChanges.subscribe(val => {\n this.hasValue = !!val;\n });\nRun Code Online (Sandbox Code Playgroud)\n\n寻求更深入地了解这里发生的事情:
\n\n这两种订阅都基于控件的事件,当离开控件时这些事件将被销毁。订阅是否不会取消订阅,因为它不会引用任何内容?\xe2\x80\x95OR\xe2\x80\x95订阅本身是否创建对所述控件的引用,从而使其无法进行垃圾收集?
\n\n更新忘记提及:在我的测试中,我发现blur$在组件销毁后未定义,如果取消订阅将抛出错误。但是, valChanges$.unsubscribe() 不会抛出错误,但它们都是同一组件的一部分。
\n如果您阅读FromEventObservable的源代码和文档,您会发现它只是在事件目标元素上添加/删除事件回调。当目标元素在取消订阅可观察对象之前以某种方式被破坏时,回调将永远不会再次执行。然而,可观察本身在技术上仍将被“订阅”并等待更多事件。
没有适当的机制可以观察事件目标“存在”本身并自动为您取消订阅可观察的内容。
FromEventObservable也尝试尽可能通用。它不希望您的目标是 HTML DOM 节点。
最低的期望是,您的目标有一个addEventListener方法removeEventListener。这意味着它无法跟踪理论上的“元素被移除/销毁事件”。FromEventObservable理论上可以检测 HTML 节点并给予它们特殊处理,但这会导致不同目标类型之间的行为不一致。
长话短说
是的,你应该这样做,因为 RxJS 不知道已删除的事件目标。
| 归档时间: |
|
| 查看次数: |
8013 次 |
| 最近记录: |