Angular-ui State - 多个视图未看到我的解析数据

时间:2015-01-26 11:15:57

标签: angularjs angular-ui-router

出于某种原因,当使用多个命名视图(angular-ui ui-router)时,我的resolvedData没有被控制器看到。有人遇到过这个问题吗?

$stateProvider
    .state('page',{
           abstract: true,
           templateUrl: ...,
           controller: abstractController
    })
    .state('page.index',
           url: '/page',
           resolve : {
               resolvedData: function(CONSTANTS){ return CONSTANTS.data;}
           },
           views: {
               home: {templateUrl: ..., 
                      controller: function(resolvedData){
                        ....
                      }
               },
               list: {templateUrl: ..., 
                      controller: function(resolvedData){
                        ....
                      }
               },
               edit: {templateUrl: ..., 
                      controller: function(resolvedData){
                        ....
                      }
               }
           }
     )

它给我的错误是:错误:[$ injector:unpr]未知提供者:resolvedDataProvider< - resolvedData。它有点有趣,因为它只发生在一个视图中而不是其他视图中。

1 个答案:

答案 0 :(得分:3)

我创建了small working example,表明你的东西应该有效

这将是CONSTANTS:

.factory('CONSTANTS', function() {
    return { data: { name :  "some name", number : "some number"} };
})

同样(只是明确注释DI)状态def:

  // States
  $stateProvider
    .state('page', {
      abstract: true,
      template: '<div>' 
       + '<div ui-view="home"></div>' 
       + '<div ui-view="list"></div></div>',
      controller: 'abstractController'
    })
    .state('page.index', {
      url: '/page',
      resolve: {
        resolvedData: ['CONSTANTS',
          function(CONSTANTS) {
            return CONSTANTS.data;
          }
        ]
      },
      views: {
        home: {
          templateUrl: 'tpl.html',
          controller: ['resolvedData','$scope',
            function(resolvedData, $scope) {
              console.log(resolvedData);
              $scope.resolvedData = resolvedData;
            }
          ],
        },
        list: {
          template: '<div>list view</div>'
        }
      }
    })

因此,上面使用的决议草案正在起作用。这是正确的方法......解析函数提供了一些服务...并返回其属性data

检查所有here