angular - 您是否需要取消订阅 Angular 中的路由器参数?
问题描述
订阅组件中的查询参数时,需要退订吗?我试图避免内存泄漏。
带有变量的订阅unsubscribe()
subscription$: Subscription
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.subscription$ = this.route.queryParams.subscribe(
(params: any): void => {
// ... Do stuff here ...
}
)
}
ngOnDestroy() {
if (this.subscription$ !== undefined || this.subscription$ !== null) {
this.subscription$.unsubscribe()
}
}
不带变量的订阅unsubscribe()
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.queryParams.subscribe(
(params: any): void => {
// ... Do stuff here ...
}
)
}
哪一个是更好的解决方案?
解决方案
当组件被销毁时,ActivatedRoute 取消订阅它的所有订阅者。
您可以查看文档:https ://angular.io/guide/router#!#reuse
当订阅组件中的 observable 时,您几乎总是安排在组件被销毁时取消订阅。
有一些特殊的 observables 是不必要的。ActivatedRoute 可观察对象属于例外。
ActivatedRoute 及其 observables 与 Router 本身是绝缘的。当不再需要路由组件并且注入的 ActivatedRoute 随之消亡时,Router 会销毁路由组件。
推荐阅读
- c# - 如果按钮位于父面板中,则模板中单选按钮的双向绑定会出错
- html - 锚标签上的下载属性不适用于边缘中的相对路径
- dart - 我应该使用构造函数或方法来实现 Json 到 List
- arrays - 在 Swift 中拆分行而不省略空行
- matlab - 如何在 MATLAB 中替换标志之间的字符
- javascript - 在 Safari 中拖动时数据工具提示不起作用
- mysql - SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException: could not extract ResultSet
- python - 展平 Python Dict 并且仅在不唯一时更改键
- azure-cosmosdb - Gremlin CosmosDB 尝试从节点列表中查询节点列表并将两者都返回
- vue.js - 无法使用 vue 和 express 使用 axios POST