从子状态访问ui-router父状态视图

时间:2015-04-27 10:22:00

标签: javascript angularjs angular-ui-router

我有一些定义如下的状态:

$stateProvider.state('main.product', {
  url: '',
  abstact: true,
  views: {
    '': {
      templateUrl: 'product/index.html'
    },
    'sidebar': {
      templateUrl: 'product/sidebar.html'
    }
  }
});

$stateProvider.state('main.product.overview', {
  url: '/products/:product_id',
  templateUrl: 'product/overview.html',
  controller: 'ProductOverviewController'
});

在我的“主要包装”控制器中,我想访问抽象状态views,如下所示:

angular.module('myApp').controller('MainController', function($rootScope, $scope, $state, $stateParams) {

  console.log($state.$current.views.sidebar.templateUrl);

});

如果我处于父状态main.product,则此方法有效。但是,正如预期的那样,这将为子状态main.product.overview返回undefined。

如何从子州访问views

我知道我可以使用data object,例如:

$stateProvider.state('main.product', {
  url: '',
  abstact: true,
  views: {
    '': {
      templateUrl: 'product/index.html'
    },
    'sidebar': {
      templateUrl: 'product/sidebar.html'
    }
  },
  data: {
     'sidebar': {
       templateUrl: 'product/sidebar.html'
     }
  }
});

然后像这样访问:

console.log($state.current.data.sidebar.templateUrl)

但这不干净,templateUrl会重复。

是否可以从子状态访问views

1 个答案:

答案 0 :(得分:0)

您可以使用get方法

来引用任何州
$state.get('main.product').views.sidebar.templateUrl