【发布时间】:2019-03-31 17:18:50
【问题描述】:
我遇到了涉及参数的路由问题。当我尝试使用浏览器的后退按钮返回时,前一个组件的 ngoninit 不会触发。
使用 Angular 的教程重现错误的步骤:
- 从https://angular.io/tutorial下载教程并运行
npm install - 使用命令
ng build --prod --build-optimizer或ng build --prod构建应用程序 - 将上一步生成的静态文件上传到 nginx 或 apache 服务器,相应的配置文件包含 angular 文档中推荐的代码行。 https://angular.io/guide/deployment
- 点击仪表板中的顶级英雄之一。
- 点击浏览器的后退按钮。
按照这些步骤,您将看到顶级英雄未加载到仪表板中,这与我的应用程序遇到的问题完全相同。这是因为在使用返回按钮返回时没有调用 ngOnInit。
需要注意的几点:
此问题仅在使用 Firefox、Chrome 或 Opera 时出现。
使用开发模式时不会出现此问题ng serve。
我更新到 Angular 7 仍然有同样的问题。
有什么办法可以解决这个问题吗?我在 Angular 的 repo 问题中没有找到任何关于此的内容。
【问题讨论】:
-
这是一个
ngOnInit用于使用ActivatedRoute的组件/路由/视图吗? -
如果路由参数没有改变,那么
ngOnInit()可能不会触发。这已通过使用 constructor 解决。人们也使用 popState() 使用Location -
@AlexanderStaroselsky 正在读取参数的组件具有
ActivatedRoute,但前一个组件是未调用 ngOnInit 的组件。就是这样example -
从哪个组件返回
ngOnInit()没有被触发?您是否会从一个孩子回到另一个孩子,但期望来自父组件的ngOnInit()?如果是这种情况,那么您的父组件不会被破坏,那么它将不会被初始化。其他组件也是如此。确保它被ngOnDestroy()销毁以期待ngOnInit()。您可以使用Augurychrome 扩展来帮助查看组件之间的关系。 -
@muradm 我将回到 Angular 教程所示的兄弟组件。很奇怪,没有人对此说任何话,因为即使在教程中它看起来也不能正常工作。