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

gre*_*emo 8 angularjs angular-ui angular-ui-router

我的州等级是(从上到下):

  1. root
  2. account
  3. account.invoices
  4. account.invoices.detail

当我在 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)
    }]);
Run Code Online (Sandbox Code Playgroud)

Angular UI路由器允许您转换到父状态(即从视图中data-ui-sref="^"),因此应该可以实现这一点(跟随祖先的链root).

我需要这个来构建类似auto-breadcrumbs的功能.

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

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;
}
Run Code Online (Sandbox Code Playgroud)

如果你问为什么检查parent.name.length它,因为在Angular UI中有类似"root"状态(无法获得任何文档).

JcT*_*JcT 11

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

  • 我在寻找什么,非常感谢!我使用`.parent`而不是`.includes`. (2认同)