位置: 编程技术 - 正文
推荐整理分享浅谈Angular 中何时取消订阅(angular1),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:angular nz,angular deviation,angular then,angular1,angular nz,angular then,angular1,angular then,内容如对您有帮助,希望把文章链接给更多的朋友!
你可能知道当你订阅 Observable 对象或设置事件监听时,在某个时间点,你需要执行取消订阅操作,进而释放操作系统的内存。否则,你的应用程序可能会出现内存泄露。
接下来让我们看一下,需要在 ngOnDestroy 生命周期钩子中,手动执行取消订阅操作的一些常见场景。
手动释放资源场景
表单
以上方案也适用于其它的表单控件。
路由
Renderer 服务
Infinite Observables
当你使用 interval() 或 fromEvent() 操作符时,你创建的是一个无限的 Observable 对象。这样的话,当我们不再需要使用它们的时候,就需要取消订阅,手动释放资源。
Redux Store
无需手动释放资源场景
AsyncPipe
当组件销毁时,async 管道会自动执行取消订阅操作,进而避免内存泄露的风险。
Angular AsyncPipe 源码片段
@HostListener
需要注意的是,如果使用 @HostListener 装饰器,添加事件监听时,我们无法手动取消订阅。如果需要手动移除事件监听的话,可以使用以下的方式:
Finite Observable
当你使用 HTTP 服务或 timer Observable 对象时,你也不需要手动执行取消订阅操作。
timer 操作符
操作符签名
操作符作用
timer 返回一个发出无限自增数列的 Observable,具有一定的时间间隔,这个间隔由你来选择。
操作符示例
最终建议
你应该尽可能少的调用 unsubscribe() 方法,你可以在RxJS: Don't Unsubscribe 这篇文章中了解与 Subject 相关更多信息。
具体示例如下:
takeUntil 操作符
操作符签名
操作符作用
发出源 Observable 发出的值,直到 notifier Observable 发出值。
操作符示例
标签: angular1
本文链接地址:https://www.jiuchutong.com/biancheng/377421.html 转载请保留说明!友情链接: 武汉网站建设