2017-03-29 1 views
0

나는 인증에 사용하는 개인적인 방법이 있습니다. 그런 다음 실제 로그인을 수행하는 login이라는 구성 요소를 호출하는 또 다른 방법 (공용)이 있습니다. 나는 login 메서드를 구독 할 수 있기를 원합니다. 실제로 authentication 메서드를 구독하면 각 뷰에 대해 로그인이 다르게 수행되는 동안로드 및 기타 메시지를 표시 할 수 있습니다. 가능한가?각도로 다른 구독 신청

인증 방법 :

private userAuthenticate(email: string, password: string) { 
    return this.httpPost(`${this.baseApiUrl}/auth?format=json&provider=login`, {userName: email, password: password}).subscribe(
     res  => this.saveJwt(res.bearerToken), 
     err  => this.logError(err), 
     ()  => console.log("Authentication done.") 
    ); 
} 

로그인 방법 :

login(email: string, password: string) { 
    this.logout(); 
    return this.userAuthenticate(email, password); 
} 

나는 등 내 로더 및 오류 메시지를 제어 할 수 있도록 로그인에 방법을 가입하고자 할 도와주세요.

답변

2

Subscription (subscribe()에서 반환)을 구독 할 수 없으며 Observable만을 구독 할 수 있습니다.

Observable 사용 map() 대신 subscribe()를 얻으려면, 다음 login()의 발신자가 가입 다른 callabacks를 들어

private userAuthenticate(email: string, password: string) { 
    return this.httpPost(`${this.baseApiUrl}/auth?format=json&provider=login`, {userName: email, password: password}).map(
     res  => this.saveJwt(res.bearerToken), 
    ); 

을 수행 할 수 있습니다, 당신이 정말로 그들을 필요로하는 경우, 당신은 catchfinally 연산자를 사용할 수 있습니다.

+0

어떻게 든 두 가지로 작동하게 할 수 있습니까? 예를 들어,'login' 메소드를 호출하면 연결되지 않으면 자동으로 구독이 활성화됩니까? 'login.subscribe()'와 어떤 경우에는'login()'과 같습니다 (이전의 메소드가 디폴트입니다). 그렇지 않다면 두 개의 별도 메소드'$ login'와'login'을 만들어야 할 필요가 있습니다. – Hassan

+0

왜 그렇게하고 싶은지 이해하지 않고 말하기는 어렵지만'userAuthenticate(). subscribe())'당신이 원하는 것을 할 수 있습니다. 아마도 http://stackoverflow.com/questions/36271899/what-is-the-correct-way-to-share-the-result-of-an-angular-2-http-network-call-in/36291681 수도 있습니다. 관련성이있다. –

+0

'catch'와'finally'를 사용한다고하면,'userAuthenticate' 메소드에서 의미하는 것이 맞습니까? – Hassan