Angular 10:使用浏览器的后退按钮从外部URL向后导航时,ngOnInit不会在Firefox中部署的应用程序版本中触发



我看到部署的Angular应用程序的生命周期在Firefox中看起来有所不同。

应用程序组件有一个非常琐碎的代码:

export class AppComponent implements OnInit {
public ngOnInit(): void {
console.log('OnInit');
}
}

它的html也很简单:

<a href="https://angular.io">Bring me to external URL</a>

我预计会出现以下情况。用户打开应用程序,在控制台中看到"OnInit",通过链接导航,单击后退按钮,并在控制台中显示新的"OnInit"消息(如果保留日志,则显示第二条消息(。

如果我在任何浏览器中使用ng serve本地运行应用程序,它都可以正常工作。

但是,如果我使用ng build --prod构建应用程序,部署它(例如使用命令行http服务器(并在Firefox中打开它,情况看起来就不一样了。当我加载应用程序时,我仍然会在控制台中看到"OnInit"。但当我点击链接并返回时,什么也没发生。未到达OnInit内部的代码。看起来组件或整个页面没有重新加载,FF呈现以前的状态。

它会引起一些令人讨厌的问题。例如,当用户从第三方OAuth登录页面返回时,他们会看到上一个屏幕的错误状态。

我还检查了应用程序内部的导航。它完美地适用于所有内部URL。

你能向我解释一下为什么会发生这种情况,以及如何在Firefox中获得OnInit吗?

我在GitHub上找到了类似的线程。但是Angular团队并不认为这是一个框架的问题。

当您从外部URL"返回"到您的应用程序时,Angular没有运行生命周期挂钩会导致此问题。

@HostListener("document:visibilitychange", ["$event"])
handleVisibilityChange(event: any): void {
// Handle stuff
}
}

来自Why don的代码';在我的应用程序中更改选项卡时是否运行生命周期挂钩?

最新更新