为什么解决方案在角度ui-router中不起作用?

时间:2015-10-19 06:41:33

标签: angularjs angular-ui-router state

我想在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'};
 }]);

3 个答案:

答案 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(如果您使用多个观看次数)。