Angular2路由问题 - 区域感知错误序列中没有元素

时间:2017-08-28 01:39:48

标签: angular2-routing

我搜索了很多,找不到任何解决我问题的答案。所以我发布这个问题。

我的问题与这个问题非常相似。 Angular 2.0.1 Router EmptyError: no elements in sequence

但是我甚至无法通过添加pathMatch来解决它:'full',。

尝试从列表表导航(导航到详细视图)时出现间歇性的zonewaware错误  下面是我的模块。

@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]
        }
    ]),

我的authGuard服务有一个canActivate方法,只返回一个布尔值。

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

这是错误: Zone aware error

我可以使用{enableTracing:true}获取路由器事件日志:

Router Event: NavigationStart
Router Event: RoutesRecognized
Router Event: GuardsCheckStart
Router Event: GuardsCheckEnd
Router Event: ResolveStart
Router Event: NavigationError

1 个答案:

答案 0 :(得分:0)

感谢所有关注此问题的人。我得到了我的问题的答案。

正如我所描述的,当我路由到详细信息页面时,我只有很少的解析器。在其中一个解析器上,有一个获取元素的逻辑。

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

https://stackoverflow.com/a/42346203/5162622 - 如前所述,第一个()发送错误通知,因为没有值。所以我用take(1)替换它,一切看起来都不错。

正如我在评论中提到的那样,知道如何在路由时进行事件跟踪是很好的。这就是我如何追踪它。