Angular ui-router解决不起作用

时间:2015-02-25 16:02:52

标签: angularjs angular-ui-router

我正在尝试在主状态解析函数中加载get服务JSON函数,因此我可以将数据存储到范围变量中。

帐户JSON信息是相关的,因为所有子页面基本上都依赖于信息。

-

以下代码部分正常运行。正在成功调用帐户解析函数,甚至$ http也会返回一个promise(状态=== 0)。问题是当帐户功能解析state.controller永远不会被调用。

$stateProvider
            .state('app',{
                url: '/',
                views: {
                    'header': {
                        templateUrl: '../views/templates/partials/header.html',
                    },
                    'content': {
                        templateUrl: '../views/templates/partials/content.html' 
                    },
                    'footer': {
                        templateUrl: '../views/templates/partials/footer.html',
                    }
                },
                resolve: {
                    account:  function($timeout, accountFactory){
                        //Comment
                        return $http({method: 'GET', url: '/account.json'});
                     }
                },
                controller: ['$scope', 'account',  function($scope, account){
                    // You can be sure that promiseObj is ready to use!
                    $scope.data = account;
                    console.log('SCOPE!!!!!');
                }],
            })
            .state('app.accessory', {
                url: 'accessory',
                views: {
                    'content@': {
                        templateUrl: '../views/accessory/listing.html',
                        controller: 'accessoryListingCtrl',
                        controllerAs: 'vm'
                    }
                }

            })
    }]);

2 个答案:

答案 0 :(得分:1)

您的父状态配置不正确。使用多个命名视图时控制器不属于某个状态而属于视图,因此您应该将控制器语句移动到特定视图声明,或者如果您在任何地方需要它们,则将它们全部移动。

见这里:https://github.com/angular-ui/ui-router/wiki/Multiple-Named-Views

$stateProvider
  .state('report',{
    views: {
      'filters': {
        templateUrl: 'report-filters.html',
        controller: function($scope){ ... controller stuff just for filters view ... }
      },
      'tabledata': {
        templateUrl: 'report-table.html',
        controller: function($scope){ ... controller stuff just for tabledata view ... }
      },
      'graph': {
        templateUrl: 'report-graph.html',
        controller: function($scope){ ... controller stuff just for graph view ... }
      },
    }
  })

答案 1 :(得分:0)

我不知道为什么控制器没有被调用。但您可以首先确保resolve始终返回数据。

resolve: {
    account:  function($timeout, accountFactory){
        //Comment
        return $http({method: 'GET', url: '/account.json'})
            .$promise.then(
                function(data) { return data; },
                function(error) { return error; });
    }
}