Angular 2:NavigationCancel - 导航ID 2不等于当前导航ID 3

时间:2017-01-30 13:29:10

标签: angular angular2-routing

我正在尝试将旧网址(电子邮件模板中的链接)从之前的网站重定向到另一条路线,如下所示:

if (route.url.indexOf('/#/') !== -1) {
    this.router.navigate(['/my-route']);
}

但是,导航会被取消,原因如下:

Navigation ID 2 is not equal to the current navigation id 3

查看Angular 2路由器源,runNavigatehttps://github.com/angular/angular/blob/master/modules/@angular/router/src/router.ts#L652id !== this.navigationId方法会发生这种情况。我找不到有关navigationId属性的任何信息,为什么会发生这种情况以及如何解决它。

在存在的路由之间重定向似乎有效,但不在这些旧的hashmark URL和现有路由之间重定向。路由器中是否必须存在两条路由才能在它们之间重定向?

非常感谢帮助。

4 个答案:

答案 0 :(得分:17)

我收到此错误是因为我快速连续两次调用router.navigate,(1添加queryParams,1添加片段)所以不得不重构我的代码只调用一次导航。

答案 1 :(得分:1)

我们遇到了同样的错误。问题是自定义组件具有一个名为routerLink的输入字段,该字段用于自定义链接。但是此字段导致Angular进行两次导航,导致“导航ID 2不等于当前导航ID 3”错误。

答案 2 :(得分:0)

我遇到了完全相同的问题,但是找到了另一个原因来解释它。

这是因为锚链接上的HTML属性href="#"在我的onClick方法中调用了router.navigate()

此处的详细答案:

https://stackoverflow.com/a/61595269/3992814

答案 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>

它将正常工作。...编码愉快!