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

Javascript 路由器解析将不会注入控制器,javascript,angularjs,angular-ui-router,angularjs-service,Javascript,Angularjs,Angular Ui Router,Angularjs Service,我已经尽了一切努力来获得ui路由器的解析,将其值传递给给定的控制器——AppCtrl。我将依赖项注入与$inject一起使用,这似乎导致了问题。我错过了什么 路由 $stateProvider.state('app.index', { url: '/me', templateUrl: '/includes/app/me.jade', controller: 'AppCtrl', controllerAs: 'vm', resolve: { auser: ['User'

我已经尽了一切努力来获得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

  ...
}
编辑
这里有一个plunk

当您在绑定到路由的控制器中使用路由解析参数作为依赖项注入时,您不能将该控制器与ng控制器指令一起使用,因为名为
aname
的服务提供商不存在。当路由器在其各自的部分视图中实例化要绑定的控制器时,它会注入一个动态依赖项

另外,请记住在您的示例中返回
$timeout
,因为它返回一个承诺,否则您的参数将被解析为无值,如果您使用
$http
或其他返回承诺的服务,情况也是如此

i、 e

在控制器中,注入解析依赖项

appControllers.controller('AppCtrl', AppCtrl);

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

function AppCtrl($scope, $rootScope, auser) {
  var vm = this;
  vm.user = auser;
}
在视图中而不是ng控制器中,使用
ui视图
指令:

<div ui-view></div>


以下是我如何使用resolve。它应该得到承诺。所以我创建了相应的服务

app.factory('User', function($http){
    var user = {};
    return {
        resolve: function() {
            return $http.get('api/user/1').success(function(data){
                user = data;
            });
        },
        get: function() {
            return user;
        }
    }
});
这是主要思想。您也可以使用
$q

app.factory('User', function($q, $http){
    var user = {};
    var defer = $q.defer();

    $http.get('api/user/1').success(function(data){
        user = data;
        defer.resolve();
    }).error(function(){
        defer.reject();
    });

    return {
        resolve: function() {
            return defer.promise;
        },
        get: function() {
            return user;
        }
    }
});
这些在实际操作中几乎相同。区别在于,在第一种情况下,服务将在调用服务的
resolve()
方法时开始提取日期,在第二个示例中,它将在创建factory对象时开始提取日期

现在在你的州

$stateProvider.state('app.index', {
  url: '/me',
  templateUrl: '/includes/app/me.jade',
  controller: function ($scope, $rootScope, User) {
    $scope.user = User.get();
    console.log($scope.user);
  },
  controllerAs: 'vm',
  resolve: {
    auser: function(User) {
      return User.resolve()
    }
  }
});

您是否错过了注射
auser
<代码>AppCtrl.$inject=['$scope','$rootScope','auser']注入
auser
会导致
[$injector:unpr]
错误:(您不能提供ng控制器,您需要使用route Only Great input设置它!它可以工作:D您想作为答案发布吗?此评论“//Injection auser here”刚刚解决了我2小时的研究问题!!谢谢
$stateProvider.state('app.index', {
  url: '/me',
  templateUrl: '/includes/app/me.jade',
  controller: function ($scope, $rootScope, User) {
    $scope.user = User.get();
    console.log($scope.user);
  },
  controllerAs: 'vm',
  resolve: {
    auser: function(User) {
      return User.resolve()
    }
  }
});