javascript - Angular:如何在调用 ngOnDestroy 之前检查 queryParams 的变化
问题描述
我想ngOnDestroy
根据当前路线的变化有条件地执行一些代码。
Route 从/foo
变为/login?logout=true
,并且这个变化是在 Foo 组件之外触发的。
在ngOnInit
我订阅 queryParam 更改,以正确更新loggingOut
标志。
我的问题是,ngOnDestroy
在 queryParam 的下一个处理程序之前调用它,所以它的loggingOut
值不正确。
export class FooComponent implements OnInit, OnDestroy {
loggingOut = false;
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
this.route.queryParamMap.subscribe(queryParams => {
this.loggingOut = queryParams.get('logout') === 'true';
});
}
ngOnDestroy(): void {
if (this.loggingOut) {
// do this
} else {
// do that
}
}
}
似乎这是生命周期 POV 的预期行为,所以有以下问题:
ngOnDestory
有没有办法在调用之前检查路线变化?
如果可能,请添加指向文档的链接,描述如何ngOnDestory
针对导航更改调用生命周期钩子(尤其是 )?
谢谢。
解决方案
我的问题是,在 queryParam 的下一个处理程序之前调用 ngOnDestroy
componentDestroyed = false;
ngOnInit(): void {
this.route.queryParamMap.subscribe(queryParams => {
if (!this.componentDestroyed)
this.loggingOut = queryParams.get('logout') === 'true';
else {
// Do here what you wanted to do in ngOnDestroy
}
});
}
ngOnDestroy(): void {
this.componentDestroyed = true;
}
这会解决你的问题吗?
推荐阅读
- amazon-web-services - DynamoDB - 创建表 - IAM 策略 - 未授权错误
- java - HttpsURLConnection 提供连接超时,但使用 JS XMLHttpRequest()
- naming-conventions - 验证用户或验证电话号码?哪个更有意义、更好和更标准?为什么?
- java - 处理按钮区域中手指的进出
- blob - 如何使用 azure 函数中的元数据将 blob 文档从一个容器移动到另一个容器?
- antd - 在同一个项目中使用 antd(React) 和 antd-mobile(React)
- python-3.x - 这些陈述之间有什么区别?
- ruby-on-rails - Rails 6 Turbolink 返回上一页的问题
- python - 如何从 Python 调用 Go 函数
- ios - 如何在 iOS 上实用地使用 Expo Cli 杀死 react-native 应用程序?