Angular 2 Router.navigate in Service.好的做法?
发布时间:2020-12-17 18:05:54 所属栏目:安全 来源:网络整理
导读:我正在构建一个有许多用户角色的应用程序.因此,当我登录时,我将用户角色返回到响应中并且必须相应地进行导航.我已经创建了一个服务url-redirect.service.ts,并且我已经创建了这样的函数. redirect(user_role){ switch (user_role){case 1: this.router.navig
我正在构建一个有许多用户角色的应用程序.因此,当我登录时,我将用户角色返回到响应中并且必须相应地进行导航.我已经创建了一个服务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; 所以现在工作正常.但我只是觉得这样做是不对的,因为之后会有一些代码,并且路由会在这之间发生变化.我不确定有什么优点和缺点.有人可以告诉我,如果那是好的做法吗? 解决方法
我思考了同样的问题.这是我的服务登录方法:
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将是错误的.但是,鉴于它总是如此,那么这种方法可以确保一致性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |