如何调试未捕获(在promise中):EmptyError:没有由router.navigate引起的顺序元素?

Ian*_*ici 17 angular angular-router

我正在尝试实现一个简单的角度路线

const appRoutes: Routes = [
   { path: ''        ,redirectTo: '/recipes', pathMatch: 'full'},
   { path: 'recipes'              , component: RecipesComponent},
   { path: 'recipes/:recipeName'  , component: RecipesComponent},
];
Run Code Online (Sandbox Code Playgroud)

在一些生成列表的组件中,我有一个函数,点击更新状态变量和路由,虽然我也有初始化时发生的提取机制订阅.

  ngOnInit() {
    this.route.params
      .subscribe(
        (params: {Params}) => {

          this.selectedRecipe = this.findRecipeByName(params['recipeName']);  
        });
  }


   navRecipe(recipeName: string): void {
      let path = '/recipes/' + recipeName;
      this.selectedRecipe = this.findRecipeByName(recipeName);
      this.router.navigate([path]);
   }
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试单击一个重新路由到带有参数的组件的链接时,我得到以下内容:

core.js:1350 ERROR Error: Uncaught (in promise): EmptyError: no elements in sequence
EmptyError: no elements in sequence
    at new EmptyError (EmptyError.js:28)
    at FirstSubscriber._complete (first.js:154)
    at FirstSubscriber.Subscriber.complete (Subscriber.js:122)
    at MergeMapSubscriber._complete (mergeMap.js:150)
    at MergeMapSubscriber.Subscriber.complete (Subscriber.js:122)
    at MapSubscriber.Subscriber._complete (Subscriber.js:140)
    at MapSubscriber.Subscriber.complete (Subscriber.js:122)
    at EmptyObservable._subscribe (EmptyObservable.js:83)
    at EmptyObservable.Observable._trySubscribe (Observable.js:172)
    at EmptyObservable.Observable.subscribe (Observable.js:160)
    at new EmptyError (EmptyError.js:28)
    at FirstSubscriber._complete (first.js:154)
    at FirstSubscriber.Subscriber.complete (Subscriber.js:122)
    at MergeMapSubscriber._complete (mergeMap.js:150)
    at MergeMapSubscriber.Subscriber.complete (Subscriber.js:122)
    at MapSubscriber.Subscriber._complete (Subscriber.js:140)
    at MapSubscriber.Subscriber.complete (Subscriber.js:122)
    at EmptyObservable._subscribe (EmptyObservable.js:83)
    at EmptyObservable.Observable._trySubscribe (Observable.js:172)
    at EmptyObservable.Observable.subscribe (Observable.js:160)
    at resolvePromise (zone.js:824)
    at resolvePromise (zone.js:795)
    at eval (zone.js:873)
    at ZoneDelegate.invokeTask (zone.js:425)
    at Object.onInvokeTask (core.js:4621)
    at ZoneDelegate.invokeTask (zone.js:424)
    at Zone.runTask (zone.js:192)
    at drainMicroTaskQueue (zone.js:602)
    at ZoneTask.invokeTask [as invoke] (zone.js:503)
    at invokeTask (zone.js:1540)
Run Code Online (Sandbox Code Playgroud)

Eva*_*son 24

我在Angular v 4.4.6中遇到了同样的错误.我找到了两种解决错误的替代解决方案.一个是添加pathMatch: 'full'到每个路由定义.另一个是将rxjs降级到v5.5.3以下.如果一个人不适合你,也许另一个人会.

更新:似乎问题已在rxjs v5.5.5中得到修复.在使用Angular 5.0.5的项目中,将rxjs升级到v5.5.5后,错误停止发生.

  • 谢谢......改为"rxjs":"^ 5.1.0"到"rxjs":"5.5.2"现在正在工作 (3认同)

Eri*_*cky 15

Angular最新版本的bug.添加pathMatch: 'full'到所有路线.

 {
    path: '',
    component: HomeComponent,
    pathMatch: 'full'
  },
  {
   path: 'about',
   component: AboutComponent,
   pathMatch: 'full'
  },
Run Code Online (Sandbox Code Playgroud)