Angular2 - 不触发路由的情况下更改位置

4

我有一个视图,使用服务加载一个项目列表。我总是只显示一个项目,并使用<< >>按钮在项目之间切换。

是否有方法可以在不触发 Angular 的路由系统的情况下更改浏览器地址栏中的地址并将记录添加到浏览器历史记录中?

我知道如果我使用:

location.go('users/3');

它将执行上述操作,但也会触发Angular的路由系统,进而再次调用我的服务。

编辑:

看起来像是location的函数。

location.replaceState('users/3');

这个功能接近我所想要的 - 它可以在不触发任何Angular内部机制的情况下更改浏览器中的URL,但遗憾的是它替换了历史记录中最新的位置,而不是将新位置推送到顶部。


1
就像@Günter Zöchbauer所说的那样,如果您仅在顶层声明提供程序,则无论注入多少次,它都不会被重新创建。请检查此内容以查看是否有助于您正在寻找的内容:https://angular.io/docs/ts/latest/api/router/AuxRoute-class.html目前没有太多文档,但我相信它是为这些场景而设计的。 - Langley
或许有一些误解。服务并非被重建,而是每次路由触发时调用——注入服务的组件会被重建(ngOnInit被调用)。但是,我已经找到了location.replaceState函数可以完成我想要实现的更重要的部分,现在我想找到如何解决调用replaceState函数时覆盖历史记录的问题。 - Jarek
1
是的,我相信AuxRoute正是你需要做的。 - Langley
1
你没有提供有关该服务如何集成到您的应用程序中的信息。canReuse https://dev59.com/AlwX5IYBdhLWcg3wlgTl 也可能有所帮助。https://angular.io/docs/ts/latest/api/router/CanReuse-interface.html - Günter Zöchbauer
1
@GünterZöchbauer 你能把canReuse部分也加入到你的答案中作为另一种选择吗?因为这正是我在寻找的,而且由于它被隐藏在评论中,所以我差点错过了它。 - Leonard Brünings
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接