【问题标题】:Why resolve does not work in angular ui-router?为什么解析在角度 ui-router 中不起作用?
【发布时间】:2023-03-09 23:40:01
【问题描述】:

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

【问题讨论】:

    标签: angularjs angular-ui-router state


    【解决方案1】:

    两个视图共享同一个控制器,但只提供一个视图 解决。所以,让我们把它移到一个状态(未命名的视图)级别

    $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;
             });
            }
        }
    });
    

    【讨论】:

    • Brother @Radim Köhler 我已经像你上面提到的那样更改了我的代码,错误已解决,但我无法接收任何数据。 $scope.dummyTasks={}; $scope.getTask=function(){ Task.query(function(data){ $scope.dummyTasks=data; }); }();但是这个方法可以接收同一个工厂的数据
    • 很高兴看到进展...我准备提供帮助,但现在我们似乎遇到了不同的问题。您能否设置一个 plunker 来重现该错误。我会尽力帮助...
    【解决方案2】:

    在解析部分中,您需要一个生成器函数作为值,因此您可能必须返回您正在生成的承诺(希望 ;-))在 Task.query() 中生成和返回。

    在您编写的代码中,该函数不会返回任何内容。

    resolve: {
               alltasks: function(Task){
                 return Task.query(function(data){
                   return data;
                 });
               }
             }
    

    【讨论】:

      【解决方案3】:

      我同意 Radim Köhler 的观点。 guide 说:

      resolve 关键字必须位于 state 而不是 views(以防您使用多个视图)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多