1

내가이 일을 나던 각도에서 CanActivate 가드를 사용하기 위해 노력하고있어 작동 다만 수행하면 canActivate각도 4 서비스와 함께 사용되는 가드로드 구성 요소를 활성화 할 수 없습니다. (참) 간단한 Observable.of 내가 어떤 서비스를 호출하지 말아 때의 서비스와 <code>return true</code>도 <code>return Observable.of(true);</code></p> <p>그러나 작동 및로드 구성 요소를 호출 할 때

Observable.of(true);이다 작성한 코드 doenst 일 :

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); 
     }); 

답변

2

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는 구독이지만 관찰 할 수 없습니다.