2016-12-29 15 views
2

私は、角度2を使用してAPIを駆動するアプリケーションを持っています。コールへの応答が401 PLEASE_LOGINの場合は、ユーザーをサインアップコンポーネントにリダイレクトするangular2-角度2のビューがナビゲートした後に応答しない

問題は、サインアップコンポーネントにリダイレクトすると、正しくロードされたビューがユーザーの操作に応答しないということです。エラーはありません。たとえば、ボタンをクリックするとコンポーネントメソッドが呼び出されて動作しますが、ビューは反応しないか更新されません。

私の設定は次のとおりです。私のホームコンポーネントテンプレートには、user-sidebar.componentへの参照があります。このサイドバーコンポーネントにはngOnInitメソッドがあり、認証されたユーザーのバックエンドに問い合わせます。

ngOnInit(): void 
{ 
    this._authService 
     .me() 
     .subscribe(
      (resData: Object) => { this.user = resData.data; }, 
      (err: any) => { console.log(err); } 
     ); 
} 

のAuthService .ME()メソッド

me(): any 
{ 
    return this._appService.get('/me'); 
} 

:認証されたユーザーなしが存在しない場合、それをロードするサービスは、/サインアップ

私のユーザーsidebar.component ngOnInit法にリダイレクト私のapp.service getメソッド:

get(path: string, data: Object): Observable 
{ 
    return this._sailsService.get(path, data) 
     .catch(this.handleError.bind(this)); 
} 

public handleError(err: Response): void 
{ 
    // If the server response with unhautorized, redirect to login/signup page 
    if(err.statusCode == 401 && err.error == 'PLEASE_LOGIN') 
    { 
     this._router.navigate(['/signup']); 
    } 

    return Observable.throw(err); 
} 

角度のバグや私のコードは、私の研究が与えたかどうかわからない何もない。

+0

Observable.of(err)の代わりにObservable.of(null)を返すとどうなりますか? –

+0

subscribe onErrorコールバックは、エラーの代わりにnullを受け取ります。しかし、私の現在の問題については、何も変わらない。 –

+0

あなたのコードを以前は完全に理解していませんでした。問題が変更検知に関連していないことを確認するために 'private zone:NgZone'を注入し、' this.zone.run(()=> this._router.navigate(['/ signup']));起きていません。 –

答えて

9

検出ISNを変更する理由は実は、私にはわからない

を動作しません。あなたは

constructor(private zone:NgZone) {} 

を使用して手動で変更検出を呼び出し、

this.zone.run(() => this._router.navigate(['/signup'])); 

を実行することができ、検出を変更するようですしかし、自動的に呼び出される。
エラーハンドラでrouter.navigateが呼び出された可能性がありますが、なぜこのようなことが起こるのかはわかりません。

+0

パーフェクト、ありがとう。 –

+1

数時間後に解決策が見つかりました – Amir

+0

角度が予測できないことがあります。私は過去2時間同じことで苦労していた。ただ好奇心。変化を検出していない角度があるため、いくつかの根本的な問題がありますか? –

関連する問題