URL路径的某些部分已删除,并且浏览器历史记录中存在双重导航

时间:2019-05-11 10:50:14

标签: angular

我正在使用navigate的{​​{1}}函数。这会导致导航一次,但是会在历史记录中创建两个导航,并且URL会自动更新,其中一部分URL会被剥离,如下所述:

Router,然后在第一个导航中,URL将为this.router.navigate(['buses','big','bus-details'],queryParamas:{busId:'abc'});,但即使在第二秒中,URL也不会更新为localhost:4200/buses/big/bus-details?busId=abc,当我单击浏览器的后退按钮时,到url localhost:4200/buses/big/bus-details的位置,尽管localhost:4200/buses/big/bus-details?busId=abc函数在从url的第一次更新到第二次更新时仅被调用一次。

我一直在这样导航,但是从来没有问题。我什至检查过ngOnInit()事件仅触发一次。

我要寻找的是不应进行此URL更新,该怎么做以防止在导航时更新URL?

更新:我已经观察到只有在通过特定功能模块进行路由时才会发生此错误,但是如果我从根NavigationStart路由到该模块,则不会进行此URL更新,也不会创建两个导航,即我没有无需单击两次后退按钮即可转到我称为“导航功能”的路径/组件。因此,这似乎是功能模块中的错误,通过该功能模块进行导航,而不是我要导航的组件。

2 个答案:

答案 0 :(得分:1)

在我添加到问题中的更新之后,尽管我无法弄清为什么会这样,但我能够解决我的问题。以前,当我遇到问题时,我是从功能模块内部声明的组件中接收的navigate对象的Router对象调用AppModule函数的,并且我还观察到此导航错误仅发生在功能模块组件上,而没有发生从AppModule中定义的组件开始,所以有一个在Router中定义的服务,我首先将该服务注入了功能模块组件,然后使用该服务的this.globalService.router.navigate(path); 对象调用导航功能,如下所示,一切运行顺利。

{{1}}

答案 1 :(得分:0)

尝试深入研究Navigation Extras。 skipLocationChange不会将新状态推入历史记录。或prepareQueryParams。

尽管看起来更像是当您导航到该URL时,从代码中触发了一些内容,例如OnChanges函数。或者,也许app.routing模块中存在重定向,以捕获该导航。没有任何代码就不能说太多