在不同的视图中,如何在Angular ui-route的父/子状态之间共享解析数据?

时间:2015-12-04 23:20:16

标签: angularjs angular-ui-router

这就是我所拥有的。我需要在categoriesHomeController上提供NavbarController

    $stateProvider
        .state('master', {
            abstract: true,
            views: {
                'navbar@': {
                    templateUrl: 'views/partials/navbar.default.html',
                    controller: 'NavbarController as nb',
                }
            },
            resolve: {
                categories: function(Category) {
                    return Category.getList({ depth: 0 });
                },
            }
        })

        .state('home', {
            parent: 'master',
            url: '/',
            views: {
                'main@': {
                    templateUrl: 'views/home/home.html',
                    controller: 'HomeController as hc',
                }
            },
            resolve: {
                deals: function(Deal) {
                    return Deal.getList();
                },
            }
        });

1 个答案:

答案 0 :(得分:0)

根据documentation

  

子状态将从父状态继承已解析的依赖关系,它们可以覆盖它们。然后,您可以将已解析的依赖项注入控制器并解析子状态的功能。

$stateProvider.state('parent', {
  resolve:{
     resA:  function(){
        return {'value': 'A'};
     }
  },
  controller: function($scope, resA){
      $scope.resA = resA.value;
  }})
 .state('parent.child', {
  resolve:{
     resB: function(resA){
        return {'value': resA.value + 'B'};
     }
  },
   controller: function($scope, resA, resB){
      $scope.resA2 = resA.value;
      $scope.resB = resB.value;
  }

它还声明:

  

resolve关键字必须相对于state而不是视图(如果你使用多个视图)。   如果要在实例化子项之前等待解析promise,则必须将解析键注入子状态。