如何 router.navigate 到 Angular 4 中的相同路线并捕获相同的事件?

新手上路,请多包涵

好的,我在这里有两个用例来解决我的问题:

  1. 我正在开发一个具有 /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() (我认为它们应该……)。

  1. 在同一个应用程序中,我有一个按钮可以执行搜索并在地图中居中放置一些标记(在 /en/search/blah 中)。如果我在索引页中 或者 如果我更改搜索查询,这一切都很好。但是,如果用户将地图拖到其他地方并希望再次将相同的标记居中,我也会做 this.router.navigate(['search', this.searchQuery]); 如果它最终是同一条路线(例如,点击搜索按钮两次)它什么都不做。

虽然我同意它很好,因此如果 URL 没有更改,组件不会被重新创建,但这是一个糟糕的设计,因为在 UI-router 中你可以做同样的事情并且它会工作(据我所知) .

那么,在 Angular 4 中,当告知要导航到相同的 URL 时,如何在路由组件的构造函数/ngOnInit 中运行相同的代码?或者我如何检测 URL 是否相同并采取相应措施? (虽然我仍然认为这是糟糕的设计,但无论如何……)。

任何意见是极大的赞赏。谢谢!

原文由 DARKGuy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 222
1 个回答

当我需要“重新加载”当前组件的构造函数和 ngOnInit 函数时,我找到的唯一解决方案是一种变通方法:

我使用了“this.router.navigate”返回承诺的事实。所以我导航到其他地方,然后返回。它有点难看,但它有效并且 UI 不受影响:

 this.router.navigate(..[somewhere else]..)
    .then(()=>{this.router.navigate(..back..)})

希望能帮助到你。

原文由 rotemx 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题