我在Angularv5应用程序中使用了@ngrx/router-store,最近我遇到了一个错误:Navigation ID X is not equal to the current navigation id Y(其中X和Y是整数).

当我从特定路由B导航到路由A时,这个问题会一直发生.从任何其他路由导航到路由A似乎都可以.

我发现的另外S.O. issue related to this个问题可能是由于多次快速更新导航导致的.为了测试是否发生了这种情况(不应该发生),我在根组件中订阅了路由导航事件,在订阅中设置了一个断点,并打开了一个调试会话来逐步解决问题.这么做,我看得出来

  1. 假设当前导航ID为11.当我导航到问题路径时,路由开始导航,成功执行每个导航事件,包括NavigationEnd,然后@ngrx/router store立即抛出'ROUTER_CANCEL'个动作,说明:Navigation ID 12 is not equal to the current navigation id 13.据我所知,12是正确的导航ID(同样,导航ID 11完成,并立即抛出'ROUTER_CANCEL',而路由不会发出任何进一步的导航事件).此外,'ROUTER_CANCEL' action有效负载既包含导致问题的路由导航事件,也包含导致问题时存储的状态.导致问题的事件的ID为12,当时存储中的路由状态的ID为11.同样,12似乎是正确的导航ID,不应该抛出错误.

  2. 从问题路径导航到用户配置文件路径时,在@ngrx/router store取消导航之前,不会进行其他导航.(即,我没有快速更新导航路由)

  3. 除了ngrx调度'ROUTER_CANCEL'个操作之外,没有报告错误(也没有抛出错误).

同样,遇到问题的路由运行良好,除非导航从特定路由B开始.据我所知,这条特定路由B没有什么不同或不寻常之处(问题路由a也不关心人们来自哪里——这两条路由彼此没有关联).

最后一件事:在调试会话之外触发bug似乎总是会导致表单Navigation ID X is not equal to the current navigation id X+1中的错误,但是在调试会话内部触发bug可能会导致Navigation ID 11 is not equal to the current navigation id 15Navigation ID 13 is not equal to the current navigation id 20等错误.

有人知道发生了什么吗?我对@ngrx/router store还不太熟悉,无法真正猜测这是怎么回事.我的假设是,当@ngrx/路由store 接收到NavigationEnd个事件时,store 中的导航ID值会同步增加,所以我甚至不确定ID是如何出现故障的——更不用说在这种情况下,ID看起来是正确的了.

非常感谢您的任何 idea !

PS:我很乐意发布代码,但我的应用程序很大,我不知道这个bug是从哪里触发的.

推荐答案

我想出来了!在NavigationEnd事件中调用router.navigate()的组件中有was个代码.所以答案与this S.O. issue的答案相似(快速改变路由).

我收到这个错误是因为我在呼叫路由.快速连续导航两次(1个附加queryParams,1个附加片段),因此必须重构代码,只调用导航一次.

Typescript相关问答推荐

当类型不能undefined时,如何使编译器抛出错误?

如何在类型脚本中使用条件陈述循环

类型脚本中的Gnomeshell 扩展.如何导入.ts文件

使用FormArray在Angular中添加排序

typescribe不能使用值来索引对象类型,该对象类型满足具有该值的另一个类型'

从typescript中的对象数组中获取对象的值作为类型'

使Typescribe强制所有对象具有相同的 struct ,从两个选项

如何推断计算逻辑的类型

TypeScrip表示该类型不可赋值

从子类构造函数推断父类泛型类型

使用2个派生类作为WeakMap的键

TypeScrip中的类型安全包装类

通过泛型函数本身推断受约束的泛型参数的类型脚本问题

如何从对象或类动态生成类型

声明遵循映射类型的接口

棱角分明-什么是...接口类型<;T>;扩展函数{new(...args:any[]):t;}...卑鄙?

创建一个函数,该函数返回一个行为方式与传入函数相同的函数

垫子工具栏不起作用的Angular 布线

类型';只读<;部分<;字符串|记录<;字符串、字符串|未定义&>';上不存在TS 2339错误属性.属性&q;x&q;不存在字符串

来自枚举的<;复选框和组件列表