2017-02-07 5 views
4

私は多くのユーザーの役割があるアプリケーションを構築しています。だから私はログインし、私は返信のユーザーの役割を取得し、それに応じてナビゲートする必要があります。私はサービスurl-redirect.service.tsを作っており、このような機能を作っています。角度2のRouter.navigate in Service。いい練習?

redirect(user_role){ 

switch (user_role){ 
case 1: this.router.navigate[route1]; 
     break; 
case 2: this.router.navigate[route2]; 
     break; 

} 

このようにしてください。

しかし、私はそのサービスを委任した後でlogin.component.tsにあります。

this.urlService.redirect(res.data[0].user_roles); 

setCookies(); 

setLanguage(); 

and so on; 

のように実行するコードがあります。しかし、私はちょうどそれがいくつかのコードがあり、それの間にルートが変更されるので、それが正しいことではないという感覚を持っています。私は何が賛否両論であるか分かりません。それは良い練習であれば、誰かが私に知らせることができますか?

答えて

0

私は同じ問題を熟考しました。ここに私のサービスのログイン方法です:あなたは、私が呼び出しが.doというために作る見ることができます

login(credentials: any): Observable<any> { 
    return this.http.post(this.endpoint + '/login', credentials) 
    .map(this.extractData) 
    .do((user) => { 
     this.user = user; 
     console.warn('on successful login => navigate to redirectUrl'); 
     this.router.navigate([this.getRedirectUrl()]); 
    }) 
    .catch((err) => { 
     this.user = null; 
     return this.handleError(err); 
    }); 
} 

()

これは、あなたが(正常な応答に)何かをすることができますが、(あなたのメソッドが観測を返すことが保証さ呼び出しコードで購読することができます)。

私は内部でナビゲートしました.do()成功した​​ログインは、常に現在設定されているリダイレクトURLにナビゲートします。

いつもそうしていなかったら、router.navigateは間違っています。しかし、常にこれを行うと、このアプローチは一貫性を保証します。

関連する問題