小编典典

路由器解析将不会注入控制器

angularjs

我已经尽一切努力让ui路由器解析将其值传递给给定的控制器AppCtrl。我正在使用依赖注入$inject,这似乎引起了问题。我想念什么?

路由

$stateProvider.state('app.index', {
  url: '/me',
  templateUrl: '/includes/app/me.jade',
  controller: 'AppCtrl',
  controllerAs: 'vm',
  resolve: {
    auser: ['User', function(User) {
      return User.getUser().then(function(user) {
        return user;
      });
    }],
  }
});

控制者

appControllers.controller('AppCtrl', AppCtrl);

AppCtrl.$inject = ['$scope', '$rootScope'];

function AppCtrl($scope, $rootScope, auser) {
  var vm = this;
  console.log(auser); // undefined

  ...
}

编辑
这是一个小家伙http://plnkr.co/edit/PoCiEnh64hR4XM24aH33?p=preview


阅读 301

收藏
2020-07-04

共1个答案

小编典典

在将路由解析参数用作绑定到该路由的控制器中的依赖项注入时,由于名称aname不存在的服务提供程序,因此不能将该控制器与ng-
controller指令一起使用。当路由器在其各自的局部视图中实例化要绑定的控制器时,将注入动态依赖项。

还要记住要$timeout在示例中返回,因为它返回了一个promise,否则您的参数将被解析为没有值,如果您使用的是$http其他服务或其他返回promise的服务,情况也是如此。

  resolve: {
    auser: ['$timeout', function($timeout) {
      return $timeout(function() {
        return {name:'me'}
      }, 1000);
    }],

在控制器中注入resolve依赖项。

appControllers.controller('AppCtrl', AppCtrl);

AppCtrl.$inject = ['$scope', '$rootScope','auser']; //Inject auser here

function AppCtrl($scope, $rootScope, auser) {
  var vm = this;
  vm.user = auser;
}

在视图中而不是ng-controller中,使用ui-view指令:

<div ui-view></div>

演示版

2020-07-04