我是Angular 2-4的新手,现在用f5重新加载页面时遇到问题。如我所见,问题在于我正在导航至同一条路线,因此ngOnInit()不会再次加载。在ngOnInit()中,我初始化了一些使用的变量和动态形式。我已经看到了一种可能的解决方案,即订阅路由的参数,然后调用一个初始化所有内容的方法。像这样:
this.activeRoute.params.subscribe(
params => {
this.paramX = params['paramX'];
this.initializeComponent();
});
private initializeComponent() {
}
那是正确的方法吗?这是一个好习惯还是应该以另一种方式呢?提前致谢。
正式化我的评论:如果您使用浏览器的刷新/重新加载,或Location.reload()
刷新角度应用程序上的任何页面,则必须ngOnInit()
再次运行,并执行所有其他生命周期挂钩。
这是因为您要从头开始重新加载整个应用程序,一直到platformBrowserDynamic().bootstrapModule(AppModule)
然后重新引导所有内容。这就是刷新的作用。
如果需要演示,请打开“开发人员工具”,然后在组件中设置一个断点,ngOnInit()
然后单击“刷新”。您将在断点处停止。
您以后的注释中的措词“输入相同的路线”假定已经存在一条已知的路线。没有,因为该应用程序已完全重新引导。
您可能正在考虑router.navigate([...])
使用相同的路径参数调用您的当前位置。这不会发出NavigationStart
事件,路由器也不会尝试加载任何内容(因为为什么这样做,所以您没有导航过任何地方)。反过来,它将不会调用ngOnInit()
。
就是说,是的,当前处理路径参数的方式是最好的解决方案,主要是因为它允许您对路径中的更改做出反应,而不必强制您重新初始化组件。
换句话说,如果您所有的组件逻辑都依赖于在OnInit上设置的动态路径参数,那么如果在实例化组件后更改了参数,会发生什么?没有。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句