作者:Peaches小窝 | 来源:互联网 | 2023-05-27 10:00
我已经尝试了一切来让ui-router决定将它的值传递给给定的控制器-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
1> PSL..:
在绑定到路由的控制器中使用route resolve参数作为依赖项注入时,不能将该控制器与ng-controller指令一起使用,因为具有该名称的服务提供程序aname
不存在.它是一个动态依赖项,由路由器在实例化控制器以在其各自的局部视图中绑定时注入.
还记得$timeout
在你的例子中返回,因为它返回一个promise,否则你的参数将被解析而没有值,如果你正在使用$http
或者另一个返回promise的服务也是如此.
即
resolve: {
auser: ['$timeout', function($timeout) {
return $timeout(function() {
return {name:'me'}
}, 1000);
}],
在控制器中注入解析依赖项.
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
指令:
演示