好的,我在这里有两个用例来解决我的问题:
- 我正在开发一个具有
/en/register
路由的应用程序。当我在根目录时,一切都很好,我单击了一个按钮this.router.navigate([this.routeParams.lang, 'register']);
一切都很好,这在构造函数(或 ngOnInit,无论如何)中打开了一个模式($('#modalRegister') as any).modal('show');
。
一切正常,但如果我关闭模态,路线仍然是 /en/register/
(是的,我可以让它去 /en
但在你提出这个建议之前先看看用例 #2) ,所以当我点击按钮时,它什么也没做。构造函数或 ngOnInit 都没有被调用, 甚至没有 route.params.subscribe() 或 route.url.subscribe() (我认为它们应该……)。
- 在同一个应用程序中,我有一个按钮可以执行搜索并在地图中居中放置一些标记(在
/en/search/blah
中)。如果我在索引页中 或者 如果我更改搜索查询,这一切都很好。但是,如果用户将地图拖到其他地方并希望再次将相同的标记居中,我也会做this.router.navigate(['search', this.searchQuery]);
如果它最终是同一条路线(例如,点击搜索按钮两次)它什么都不做。
虽然我同意它很好,因此如果 URL 没有更改,组件不会被重新创建,但这是一个糟糕的设计,因为在 UI-router 中你可以做同样的事情并且它会工作(据我所知) .
那么,在 Angular 4 中,当告知要导航到相同的 URL 时,如何在路由组件的构造函数/ngOnInit 中运行相同的代码?或者我如何检测 URL 是否相同并采取相应措施? (虽然我仍然认为这是糟糕的设计,但无论如何……)。
任何意见是极大的赞赏。谢谢!
原文由 DARKGuy 发布,翻译遵循 CC BY-SA 4.0 许可协议
当我需要“重新加载”当前组件的构造函数和 ngOnInit 函数时,我找到的唯一解决方案是一种变通方法:
我使用了“this.router.navigate”返回承诺的事实。所以我导航到其他地方,然后返回。它有点难看,但它有效并且 UI 不受影响:
希望能帮助到你。