使用Angular ui-router

时间:2016-12-01 05:47:59

标签: angularjs angular-ui-router

场景是:

对于我的应用中的某些路线,我想强制用户先完成他们的个人资料。

有几种方法可以实现这一目标:

  1. 在用户内部重定向解析(我们加载用户数据的地方)
  2. 收听$stateChangeStart事件,从服务器加载用户,检查个人资料是否完整
  3. 使用方法1,是否可以将用户解析重用于其他路由(假设用户在auth解析时解决了待处理的问题)?

    使用方法2,我觉得这种方法容易出错,很难跟踪。

    这个问题有最好的做法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用service中的resolve来减少routesreuse resolve function

中的代码

以下是它的示例实现。

$stateProvider
  .state('inbox', {
    ...
    resolve: {
      profile: function (UserService) {
        return UserService.getUser();
      },
    }
  })
  .state('dashboard', {
    ...
    resolve: {
      profile: function (UserService) {
        return UserService.getUser();
      },
    }
  });

您的控制器可以是,

angular
  .module('app')
  .controller('DashboardCtrl', DashboardCtrl);

function DashboardCtrl(profile,$scope) {
  this.user_profile = profile;
}

HEre is the reference

更新:

您可以使用redirection中的resolve

resolve: {
  profile: function (UserService,$state) {
    return UserService.getUser().then(function(profile){
    if (profile.id) {
        return profile;
  } else {
        $state.go('/')
  }
  },
}