【问题标题】:Angular 2 Router.navigate in Service. Good Practice?Angular 2 Router.navigate 在服务中。好的做法?
【发布时间】:2017-02-07 21:53:10
【问题描述】:

我正在构建一个包含许多用户角色的应用程序。因此,当我登录时,我会在响应中重新获得用户角色,并且必须进行相应的导航。我做了一个服务 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;

所以它现在工作正常。但我只是有一种直觉,认为这样做是不对的,因为在那之后有一些代码,并且路线在这之间发生了变化。我不确定有什么优点和缺点。如果这是好的做法,有人可以告诉我吗?

【问题讨论】:

    标签: angular angular2-routing


    【解决方案1】:

    我也在思考同样的问题。这是我的服务登录方法:

    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 将是错误的。但是,鉴于它总是这样做,那么这种方法可以确保一致性。

    【讨论】:

      猜你喜欢
      • 2016-11-03
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多