我想在angular ui-router中的resolve属性中从工厂传递数据。我在TasksController控制器中添加了名为“alltasks”的解析密钥。但是显示的错误类似于http://errors.angularjs.org/1.4.7/ $ injector / unpr?p0 = alltasksProvider
$stateProvider.state('task',
{
url:'/task',
views:{
"sidebar":{
templateUrl:'/partial/task/taskcreateform.html',
controller:"TasksController",
},
"content":{
templateUrl:'/partial/task/taskgrid.html',
controller:"TasksController",
resolve:{
alltasks:function(Task){
Task.query(function(data){
return data;
});
}
}
}
}
});
我的控制器是:
myApp.controller("TasksController",
["$scope","$filter","$interval","$timeout","$http","$httpParamSerializerJQLike","Task","toaster","$stateParams","alltasks",
function($scope,$filter,$interval,$timeout,$http,$httpParamSerializerJQLike,Task,toaster,$stateParams,alltasks){
$scope.tasks=alltasks; //data from ui-router Resolve property
$scope.appname="Test App";
$scope.task={status:'pending'};
}]);
答案 0 :(得分:0)
两个视图共享同一个控制器,但只提供了一个视图 解决。所以,让我们将它移动到状态(非命名视图)级别
$stateProvider
.state('task',
{
url:'/task',
views:{
"sidebar":{
templateUrl:'/partial/task/taskcreateform.html',
controller:"TasksController",
},
"content":{
templateUrl:'/partial/task/taskgrid.html',
controller:"TasksController",
// this resolve would be available just for this view
//resolve:{
// alltasks:function(Task){
// Task.query(function(data){
// return data;
// });
// }
//}
}
},
// this resolve should be ready for any controller
// of any named view
resolve:{
alltasks:function(Task){
Task.query(function(data){
return data;
});
}
}
});
答案 1 :(得分:0)
在一个解决部分中,你需要一个生成器函数作为值,所以你可能必须返回你的承诺(希望;-))生成并返回Task.query()。
在您编写的代码中,该函数不会返回任何内容。
resolve: {
alltasks: function(Task){
return Task.query(function(data){
return data;
});
}
}
答案 2 :(得分:0)
我同意RadimKöhler。 guide说:
resolve
关键字必须位于state
而非views
(如果您使用多个观看次数)。