我正在构建一个有很多用户角色的应用程序。因此,当我登录时,我将用户角色返回到响应中并且必须相应地进行导航。我已经创建了一个服务url-redirect.service.ts,并且我已经创建了这样的函数。
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 :(得分: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()
这允许你做一些事情(在成功的响应上),但确保你的方法返回一个Observable(你可以在调用代码中订阅)。
我在内部导航.do()因为成功登录将始终导航到当前设置的重定向URL。
如果它不总是这样做那么router.navigate
就错了。但是,鉴于它总是如此,那么这种方法可以确保一致性。