0

I have searched quite a bit and couldn't find any answer that solved my problem. So I am posting this question.

My issue is very similar to this question. Angular 2.0.1 Router EmptyError: no elements in sequence

But I couldn't resolve it even by adding pathMatch: 'full',.

I am getting an intermittent zonewaware error when try to navigate from a list table (navigates to detail view) below is my module.

@NgModule({
imports: [
    CommonModule,
    RouterModule.forChild([
        {
            path: 'teams',
            component: TeamsListComponent,
            pathMatch: 'full',
            resolve: {
                TeamTemplate: TeamListTemplatesResolver
            },
            canActivate: [AuthenticatedGuard]
        }, {
            path: 'teams/:id',
            component: TeamFormComponent,
            pathMatch: 'full',
            resolve: {
                team: TeamFormTeamResolver,
                resources: TeamFormResourcesResolver
            },
            canActivate: [AuthenticatedGuard]
        }
    ]),

my authGuard service has a canActivate method which just returns a boolean.

public canActivate(): boolean {
    if (this.authService.isLoggedIn()) {
        return true;
    }
    this.router.navigate(['/logout', { redirect: location.pathname }]);
    return false;
}

And here is the error: Zone aware error

I could get a router event log with {enableTracing: true}:

Router Event: NavigationStart
Router Event: RoutesRecognized
Router Event: GuardsCheckStart
Router Event: GuardsCheckEnd
Router Event: ResolveStart
Router Event: NavigationError
Josf
  • 776
  • 1
  • 8
  • 21
  • What I learned is the event tracing. Now I realised this is something to do with one of my resolver. If you have issues with router try tracking the events by turning on enableTracing. `RouterModule.forRoot([ { path: '', redirectTo: '/dashboard', pathMatch: 'full' }, { path: '**', component: PageNotFoundComponent } ], {enableTracing: true}),` – Josf Aug 28 '17 at 02:47

1 Answers1

0

Thanks for anyone who looked at this issue. I got the answer to my question.

As I described, I have few resolvers while I route to the detail page. On one of those resolvers there's a logic to get elements.

public resolve(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<T[]> {
    return this.service.browse({}).first();
}

https://stackoverflow.com/a/42346203/5162622 - As mentioned here, the first() is sending error notification as there's no values. So I replaced it with take(1) and all looks good.

As I mentioned above in the comment, it was good to know how to do event tracking while routing. That's how I could track this down.

Josf
  • 776
  • 1
  • 8
  • 21