我想在用户离开我的angular 2应用程序的特定页面之前警告用户未保存的更改.通常我会使用window.onbeforeunload
,但这不适用于单页面应用程序.
我发现在角度1中,你可以挂钩$locationChangeStart
事件confirm
为用户抛出一个盒子,但我还没有看到任何显示如何使角度2工作,或者如果该事件仍然存在.我也见过为ag1提供功能的插件onbeforeunload
,但同样,我还没有看到任何方法将它用于ag2.
我希望其他人找到解决这个问题的方法; 任何一种方法都可以用于我的目的.
我正在尝试将旧网址(电子邮件模板中的链接)从以前的网站重定向到另一条路线,如下所示:
if (route.url.indexOf('/#/') !== -1) {
this.router.navigate(['/my-route']);
}
Run Code Online (Sandbox Code Playgroud)
但是,导航将被取消,原因如下:
Navigation ID 2 is not equal to the current navigation id 3
.
综观角2路由器源,这种情况发生在所述runNavigate
方法时id !== this.navigationId
(https://github.com/angular/angular/blob/master/modules/@angular/router/src/router.ts#L652).我找不到有关该navigationId
属性的任何信息,为什么会发生这种情况以及如何解决它.
在存在的路由之间重定向似乎有效,但不在这些旧的散列标记URL和现有路由之间重定向.路由器中是否必须存在两条路由才能在它们之间进行重定向?
非常感谢帮助.
当用户在浏览器中单击后退或前进按钮时,我想取消路由更改.到目前为止,我设法捕获路由更改事件,如下面的代码:
constructor(router:Router) {
router.events
.subscribe((event:Event) => {
// some logic.
// event.preventDefault(); ?
});
}
Run Code Online (Sandbox Code Playgroud)
我在事件中找不到任何方法/成员来停止事件默认.然后我会在控制台上收到此错误,因为我没有按预期注册路由配置,这是因为我location.go()
用来修改网址.
错误:未捕获(在承诺中):错误:无法匹配任何路由:'Some/Url'
有没有办法取消路由更改,以便Angular不查看路由配置?
我有一个链接:
<a routerLink="/test" (click)="testClick($event)">Test link </a>
Run Code Online (Sandbox Code Playgroud)
我想在testClick
功能上做这样的事情:
testClick(event:any) {
if (..some expression..) {
//custom popup confirmation
//if true --> event.preventDefault();
} else {
// go to link
}
}
Run Code Online (Sandbox Code Playgroud)
但是打电话preventDefault
是行不通的。我该如何解决?