【发布时间】:2017-09-24 00:32:19
【问题描述】:
好的,我的问题有两个用例:
-
我正在开发一个具有
/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 是否相同并采取相应措施? (虽然我仍然认为这是糟糕的设计,但无论如何......)。
非常感谢任何建议。谢谢!
【问题讨论】:
-
无论是谁 -1 的,至少要给出一个适当的理由这样做,否则你只是没有帮助。
-
你知道
Location吗? angular.io/api/common/Location它应该为你处理这个 -
@Z.Bagley 感谢您的建议,但从
Location所做的事情中注意到,它似乎与 location.reload() 类似,这不是我想要的:P I想要在当前迭代中运行相同的事件,而不是重新加载页面:(
标签: javascript angular routing routes angular-ui-router