我正在尝试将旧网址(电子邮件模板中的链接)从之前的网站重定向到另一条路线,如下所示:
if (route.url.indexOf('/#/') !== -1) {
this.router.navigate(['/my-route']);
}
但是,导航会被取消,原因如下:
Navigation ID 2 is not equal to the current navigation id 3
。
查看Angular 2路由器源,runNavigate
(https://github.com/angular/angular/blob/master/modules/@angular/router/src/router.ts#L652时id !== this.navigationId
方法会发生这种情况。我找不到有关navigationId
属性的任何信息,为什么会发生这种情况以及如何解决它。
在存在的路由之间重定向似乎有效,但不在这些旧的hashmark URL和现有路由之间重定向。路由器中是否必须存在两条路由才能在它们之间重定向?
非常感谢帮助。
答案 0 :(得分:17)
我收到此错误是因为我快速连续两次调用router.navigate,(1添加queryParams,1添加片段)所以不得不重构我的代码只调用一次导航。
答案 1 :(得分:1)
我们遇到了同样的错误。问题是自定义组件具有一个名为routerLink
的输入字段,该字段用于自定义链接。但是此字段导致Angular进行两次导航,导致“导航ID 2不等于当前导航ID 3”错误。
答案 2 :(得分:0)
我遇到了完全相同的问题,但是找到了另一个原因来解释它。
这是因为锚链接上的HTML属性href="#"
在我的onClick
方法中调用了router.navigate()
。
此处的详细答案:
答案 3 :(得分:0)
如果要通过 .ts 文件中的一系列路由生成 routerLink 。而且您的路线包含解析器 ...
<ng-container *ngFor="let route of Routes">
This
<div [routerLink]="route">{{route}}</div>
and This
<div [routerLink]="[route]">{{route}}</div>
and this too
<div routerLink="{{route}}">{{route}}</div>
</ng-container>
然后不要尝试使用... 解析器 ...它将不起作用...
更安全的方法是简单地在 ts 文件中创建一个函数。
navigate(link: string): void
{
this.router.navigate([link]);
}
并从html调用此函数...就像这样
<ng-container *ngFor="let route of Routes">
<div (click)="navigate(route)">{{route}}</div>
</ng-container>
它将正常工作。...编码愉快!