Как отлаживать unsaught (в обещании): EmptyError: нет элементов в последовательности, вызванных router.navigate?
Я пытаюсь реализовать простой маршрут angular
const appRoutes: Routes = [
{ path: '' ,redirectTo: '/recipes', pathMatch: 'full'},
{ path: 'recipes' , component: RecipesComponent},
{ path: 'recipes/:recipeName' , component: RecipesComponent},
];
в некотором компоненте, который генерирует список, у меня есть функция, которая при щелчке
обновляет переменную состояния и маршруты, хотя у меня также возникает выборка подписчика механизма при инициализации.
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]);
}
Но когда я пытаюсь щелкнуть ссылку, перенаправляющую компонент с параметром, я получаю следующее:
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)
Ответы
Ответ 1
Я столкнулся с той же ошибкой с Angular v 4.4.6. Было найдено два альтернативных решения для устранения ошибки. Один добавлял pathMatch: 'full'
к каждому определению маршрута. Другая была понижающая rxjs ниже v5.5.3. Если кто-то не работает для вас, возможно, другой будет.
update:. По-видимому, проблема исправлена в rxjs v5.5.5. В проекте, использующем Angular 5.0.5, после обновления rxjs до версии 5.5.5 ошибка прекратилась.
Ответ 2
Angular ошибка последней версии. Добавьте pathMatch: 'full'
ко всем маршрутам.
{
path: '',
component: HomeComponent,
pathMatch: 'full'
},
{
path: 'about',
component: AboutComponent,
pathMatch: 'full'
},
Ответ 3
Я столкнулся с той же ошибкой с Angular 5.0.1 и rxjs 5.5.3. Мы не встретили исключения, когда мы изменили порядок в массиве маршрутов. Итак, для вашего примера:
const appRoutes: Routes = [
{ path: '', redirectTo: '/recipes', pathMatch: 'full'},
{ path: 'recipes/:recipeName', component: RecipesComponent},
{ path: 'recipes', component: RecipesComponent},
];
Поместите более подробный путь (recipes/:recipeName
) перед общим путем (recipes
).