Angular 4 CanActivate guard不会加载与服务一起使用的组件; 简单的Observable.of(true)作品

我试图在Angular中使用CanActivate警卫,当我从它调用服务时,它不工作,并return true甚至return Observable.of(true);

但它工作和加载组件,当我不打电话任何服务,只写Observable.of(true);canActivate

以下是该代码的最新工作:

 canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { //return Observable.of(true); return this._userService.verify().subscribe((result: Array<Object>) => { let user : UserDetail = new UserDetail(); Object.keys(user).forEach(key=>{ let listValue = result.filter(m=>m["m_type"]==key); if(listValue.length>0){ user[key] = result.filter(m=>m["m_type"]==key)[0]["m_value"]; } }); this.userDetails = user; return Observable.of(true); //return true; }, (error: any) => { // error when verify so redirect to login page with the return url this._router.navigate(['/login'], { queryParams: { returnUrl: state.url } }); return true; }, () => { console.log("auth.guard : completed."); //return true; return Observable.of(true); }); 

以下代码作品:

 canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { return Observable.of(true); }); 

Observable不承诺订阅中的任何返回码都不起作用。 将代码更改为此。

 canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { //return Observable.of(true); return this._userService.verify().switchMap((result: Array<Object>) => { let user : UserDetail = new UserDetail(); Object.keys(user).forEach(key=>{ let listValue = result.filter(m=>m["m_type"]==key); if(listValue.length>0){ user[key] = result.filter(m=>m["m_type"]==key)[0]["m_value"]; } }); this.userDetails = user; return Observable.of(true); //return true; }).catch(() => { // error when verify so redirect to login page with the return url this._router.navigate(['/login'], { queryParams: { returnUrl: state.url } }); return Observable.of(false); }); 

当你让x = this.observable.subscribe(); x是订阅,但不可观察。