当前位置:Gxlcms > JavaScript > 详解Angular中何时取消订阅

详解Angular中何时取消订阅

时间:2021-07-01 10:21:17 帮助过:93人阅读

你可能知道当你订阅 Observable 对象或设置事件监听时,在某个时间点,你需要执行取消订阅操作,进而释放操作系统的内存。否则,你的应用程序可能会出现内存泄露。

接下来让我们看一下,需要在 ngOnDestroy 生命周期钩子中,手动执行取消订阅操作的一些常见场景。本文主要介绍了浅谈Angular 中何时取消订阅,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

手动释放资源场景

表单



以上方案也适用于其它的表单控件。

路由



Renderer 服务



Infinite Observables

当你使用 interval() 或 fromEvent() 操作符时,你创建的是一个无限的 Observable 对象。这样的话,当我们不再需要使用它们的时候,就需要取消订阅,手动释放资源。



Redux Store



无需手动释放资源场景

AsyncPipe



当组件销毁时,async 管道会自动执行取消订阅操作,进而避免内存泄露的风险。

Angular AsyncPipe 源码片段



@HostListener



需要注意的是,如果使用 @HostListener 装饰器,添加事件监听时,我们无法手动取消订阅。如果需要手动移除事件监听的话,可以使用以下的方式:



Finite Observable

当你使用 HTTP 服务或 timer Observable 对象时,你也不需要手动执行取消订阅操作。



timer 操作符

操作符签名


代码如下:


public static timer(initialDelay: number | Date, period: number, scheduler: Scheduler): Observable


操作符作用

timer 返回一个发出无限自增数列的 Observable,具有一定的时间间隔,这个间隔由你来选择。

操作符示例



最终建议

你应该尽可能少的调用 unsubscribe() 方法,你可以在RxJS: Don't Unsubscribe 这篇文章中了解与 Subject 相关更多信息。

具体示例如下:



takeUntil 操作符

操作符签名


public takeUntil(notifier: Observable): Observable<T>


操作符作用

发出源 Observable 发出的值,直到 notifier Observable 发出值。

操作符示例



相关推荐:

详解AngularJS中的表单验证

详解AngularJS中自定义指令的使用_AngularJS

详解AngularJS中自定义过滤器_AngularJS

以上就是详解Angular 中何时取消订阅的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行