Angular UI路由器,如何从控制器获取当前状态的祖先列表?

时间:2015-02-19 13:01:55

标签: angularjs angular-ui-router angular-ui

我的州级别(从上到下):

  1. root
  2. account
  3. account.invoices
  4. account.invoices.detail
  5. 当我处于account.invoices.detail状态时,我想获得祖先状态列表:

    angular
        .module('app')
        .controller('InvoiceDetailCtrl', ['$scope', '$state', function ($scope, $state) {
            var current = $state.current.name;
            // Get ancestors from current state
            // Tried $state.current.parent, $state.parent, $state.parent(current)
        }]);
    

    Angular UI路由器允许您转换到父状态(即从具有data-ui-sref="^"的视图),因此应该可以实现此目的(跟踪最高root的祖先链)

    我需要这个来构建类似自动包面包屑的功能。

    编辑:由于接受了答案,最终得到了这个结论:

    var current = $scope.$state.$current,
         parent = current.parent,
         ancestors = [current.name];
    
    while (typeof parent != 'undefined' && parent.name.length) {
        ancestors.push(parent.name);
        parent = parent.parent;
    }
    

    如果你问为什么检查parent.name.length,因为Angular UI中存在类似“root”状态的东西(无法获得任何文档)。

2 个答案:

答案 0 :(得分:11)

看看$state.$current.includes;它似乎返回一个具有与当前和父状态匹配的键的对象。我相信这些都是通过$state.includes()测试的状态。

答案 1 :(得分:1)

在您的控制器中:

function getParentList(state) {
 var parentList = [];
 var state = state.parent;
 while(state) {
  parentList.push(state.toString());
  state = state.parent;
 }
 return parentList;
}

var parents = getParentList($state.$current);