我正在使用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更新,也不会创建两个导航,即我没有无需单击两次后退按钮即可转到我称为“导航功能”的路径/组件。因此,这似乎是功能模块中的错误,通过该功能模块进行导航,而不是我要导航的组件。
答案 0 :(得分:1)
在我添加到问题中的更新之后,尽管我无法弄清为什么会这样,但我能够解决我的问题。以前,当我遇到问题时,我是从功能模块内部声明的组件中接收的navigate
对象的Router
对象调用AppModule
函数的,并且我还观察到此导航错误仅发生在功能模块组件上,而没有发生从AppModule中定义的组件开始,所以有一个在Router
中定义的服务,我首先将该服务注入了功能模块组件,然后使用该服务的this.globalService.router.navigate(path);
对象调用导航功能,如下所示,一切运行顺利。
{{1}}
答案 1 :(得分:0)
尝试深入研究Navigation Extras。 skipLocationChange不会将新状态推入历史记录。或prepareQueryParams。
尽管看起来更像是当您导航到该URL时,从代码中触发了一些内容,例如OnChanges函数。或者,也许app.routing模块中存在重定向,以捕获该导航。没有任何代码就不能说太多