【问题标题】:Angular 6 ngOnInit not firing when clicking browser's back button单击浏览器的后退按钮时,Angular 6 ngOnInit 未触发
【发布时间】:2019-03-31 17:18:50
【问题描述】:

我遇到了涉及参数的路由问题。当我尝试使用浏览器的后退按钮返回时,前一个组件的 ngoninit 不会触发。

使用 Angular 的教程重现错误的步骤:

  • https://angular.io/tutorial下载教程并运行npm install
  • 使用命令ng build --prod --build-optimizerng 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()。您可以使用Augury chrome 扩展来帮助查看组件之间的关系。
  • @muradm 我将回到 Angular 教程所示的兄弟组件。很奇怪,没有人对此说任何话,因为即使在教程中它看起来也不能正常工作。

标签: angular angular6


【解决方案1】:

你应该这样做:

this._router.events.subscribe(event => {
    // ... yourcode
});

【讨论】:

  • 嗨,我没有改变来尝试这个,但我想告诉你我把这个问题放到了 Angular 的 github 中的问题中,他们只是关闭它而不尝试我告诉他们的步骤尝试。另外我想说的是,在我的情况下,“解决方案”没有使用子域。这仅在您部署到子域时发生,并且显然在您使用 apache 或 nginx 时也会发生。更多信息:Angular's Issue
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
相关资源
最近更新 更多