我已经尽一切努力让ui路由器解析将其值传递给给定的控制器AppCtrl。我正在使用依赖注入$inject,这似乎引起了问题。我想念什么?
$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
在将路由解析参数用作绑定到该路由的控制器中的依赖项注入时,由于名称aname不存在的服务提供程序,因此不能将该控制器与ng- controller指令一起使用。当路由器在其各自的局部视图中实例化要绑定的控制器时,将注入动态依赖项。
aname
还要记住要$timeout在示例中返回,因为它返回了一个promise,否则您的参数将被解析为没有值,如果您使用的是$http其他服务或其他返回promise的服务,情况也是如此。
$timeout
$http
即
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指令:
ui-view
<div ui-view></div>
演示版