2017-02-07 4 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

Я размышлял над тем же вопросом. Вот мой метод обслуживания Логин:

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 будет ошибочным. Однако, учитывая, что он ВСЕГДА делает это, этот подход обеспечивает согласованность.

Смежные вопросы