Angular Route Resolve - 调用Controller

时间:2015-08-05 09:47:08

标签: angularjs angular-routing

使用angular ngRoute,我将请求路由到不同的视图/控制器。我想利用这个功能延迟完成一条路线,直到完成一些先决条件的期货。

我使用以下语法:

$routeProvider
  .when('/users', {
    templateUrl: 'user-view.html',
    controller: 'UserController',
    controllerAs: 'vm',
    resolve: {
      users: function(userDataService) {
        // returns a future
        return userDataService.loadUsers();
      }
    }
  })

这是一个简单的用例,我们只需要UserDataService加载users的值,然后再将其传递给控制器​​的构造函数。一切都好。

实际上,我的控制器初始化要比这复杂得多。而是将users注入控制器,而是注入UserDataService并在UserController.init()中完成初始化。

这段代码说明了我的愿望:

angular.controller('UserController', ['UserDataService', function(userDataService) {

  this.userDataService = userDataService;
  this.users = [];
  this.currentUser = null
  this.otherUsersInMyGroup = [];
  this.supervisedUsers = [];

  this.init() {
    // Return a "joined" promise that aggregates each promise
    return $q.all([

      this.userDataService.loadUsers()
      .then(function (u) { this.users = u }.bind(this)),

      this.userDataService.getCurrentUser()
      .then(function (u) { this.currentUser = u }.bind(this)),

      // ... Other load promises for other members

    ]);

  }

  return this;

}]);

这意味着我现在需要能够延迟路由完成,直到UserController.init()方法完成。

这如何与路由器中的resolve方法兼容?

鉴于resolve功能旨在为控制器的构造函数提供参数,它有点像鸡蛋和鸡蛋的情况......控制器必须在我能够创建之前创建调用controller.init(),但在创建控制器之前评估解析方法,因此可能会忽略构造函数参数。

0 个答案:

没有答案