0

我的路由器是这样的

const routes: Routes = [{
  path: '',
  canActivate: [AuthGuard],
  resolve: {
    user: UserResolver,
  },
  children: [{
    path: 'home',
    canActivate: [HomeGuard],
    component: HomeComponent,
  }, {
    ...otherRoutes,
  }],
}];

为了授权访问,HomeGuard需要一个数据,该数据位于由UserResolver. 问题是HomeGuard不等待UserResolver完成。

@Injectable({
  providedIn: 'root',
})
export class UserResolver implements Resolve<any> {

  constructor(private api: ApiService) { }

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<User> {
    return this.api.getUser().pipe(
      delay(1000), // simulates the api call duration
      map((user: User) => {
        console.log(user);
        return user;
      }),
    );
  }
}

在其他 stackoverflow 帖子中,人们声称解析器在导航之前解析对象,但这是否意味着守卫等待父解析器完成?

编辑。可以使用警卫作为解析器吗?

4

1 回答 1

3

根据角度文档。

当同时指定防护和解析器时,解析器不会执行,直到所有防护都运行并成功。

请务必检查角度文档中解释的示例。

于 2020-11-06T15:31:22.620 回答