Angular 2:如何防止路由器添加到历史记录中

21

我们有一个客户将我们的应用程序 iFrame 嵌入到他们的网站中。他们不希望我们应用程序内的路由导航影响他们网站上的后退按钮导航。

我们尝试了几种方法,包括使用 post 消息来尝试让 iFrame 在触发 history.back() 时与父窗口进行通信。

我的问题是,在使用 Angular 2 的路由器时有没有什么简单的方法来不影响浏览器的历史记录。据我所知,在 Angular 2 的高级路由器文档中没有找到任何相关内容:https://angular.io/docs/ts/latest/guide/router.html

2个回答

33

原来 Angular 2 的路由中有一种内置方式可以跳过将状态添加到历史记录中。我们在编辑器的智能提示中通过随机属性发现了这一点。

我们只需要将我们的路由代码从:

this.router.navigate([`/myPage/${this.Id}`], { relativeTo: this.route });

更改为:

this.router.navigate([`/myPage/${this.Id}`], { relativeTo: this.route, skipLocationChange: true });


3
我认为他们应该允许你在路由上指定一个标识,比如 shadow: true,以便将这种行为固定下来。 - Ciel
2
为了完整起见,这里有一个Location.replaceState()方法来实现类似的功能。 - Alex Klaus
“this.route” 是指什么?声明的变量是什么? - razorsyntax
1
@razorsyntax 我认为应该是 constructor(private route: ActivatedRoute) {... - davejoem

10

此外,NavigationExtras 中有一个选项,允许用新状态替换历史记录中的当前状态:

this.router.navigate(['/view'], {replaceUrl: true});

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