2017-10-27 12 views
0

に反映取得されていない問題は、私は明示的にref.detectChanges角度4インスタンスフィールドは、コードに変更はなく変更がテンプレート

signInWithGoogleを呼び出さない限り、コンポーネントクラスのインスタンス変数の変化が私のテンプレートファイルには反映されませんということです

export class LoginComponent implements OnInit { 
    errorMessage: string; 
    request = new LoginRequest(); 

    googleSignIn($event) { 
     $event.preventDefault(); 
     this.authService.signInWithGoogle().subscribe(
      (user: User) => { 
      console.log('logged in'); 
      }, 
      err => { 
      this.errorMessage = 'Problem while signing in with google'; 
      } 
     ); 
     } 
} 
:私はGoogleの

signInWithGoogle(): Observable<User> { 
    const observable = Observable.fromPromise(
     this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider()) 
    ).concatMap(result => { 
     const url = environment.apiEndpoint + '/rest-auth/social/google/'; 
     const request = { access_token: result.credential.accessToken }; 
     return this.login(url, request); 
    }); 
    return observable; 
    } 

    private login(url, request): Observable<User> { 
    return this.http 
     .post<User>(
     url, 
     request 
    ) 
     .concatMap((user: User) => { 
     localStorage.setItem(
      environment.constants.STORAGE_USER, 
      JSON.stringify(user) 
     ); 
     return Observable.of(user); 
     }); 
    } 

後にサインインするコンポーネントから呼び出して、私の認証サービスのメソッドは、私のコンポーネントから関連するコードスニペットをされています10

は、これは私が私のテンプレート

<ngb-alert *ngIf="errorMessage" [dismissible]="false" type="danger"> 
     {{errorMessage}} 
</ngb-alert> 
+0

https://stackoverflow.com/questions/37148813/angular-2-why-do-i-need-zone-run – martin

答えて

1

利用代わりに観測可能にコンポーネントファイルからerrorMessageを使用しています方法です:

// in component 
errorMessage$ = new BehaviorSubject<string>(null); 

googleSignIn($event) { 
    $event.preventDefault(); 
    this.authService.signInWithGoogle().subscribe(
     (user: User) => { 
     console.log('logged in'); 
     }, 
     err => { 
     this.errorMessage$.next('Problem while signing in with google'); 
     } 
    ); 
    } 

そして、あなたのテンプレートに非同期パイプを使用します。たぶん

<ngb-alert *ngIf="errorMessage$ | async as errorMessage" [dismissible]="false" type="danger"> 
    {{ errorMessage }} 
</ngb-alert> 
+0

私は解決策を試しましたが、 sの 'との問題かどうかを調べるために、あなたは' '内のいくつかの静的なテキストを入れてみました – ujjwalwahi

+0

自体は表示されません。すなわちerrorMessage'が表示されます'前の作業は、奇妙なバグがあると、私は、コンポーネント上のどこかをクリックする必要がありますerrorMessage'ローカル変数、または 'errorMessage $' observable自身で参照できますか? –

+0

固定のエラーメッセージを入れてみましたが、それも表示されていないので、問題が観測可能だと思います – ujjwalwahi

関連する問題