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

标签 angularjs angular-ui-router angular-ui

我的州层次结构是(从上到下):

  • root
  • account
  • account.invoices
  • 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)
        }]);
    

    Angular UI 路由器允许您转换到父状态(即从具有 data-ui-sref="^" 的 View ),因此应该可以实现这一点(跟踪祖先链直到 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 中存在类似于“根”状态的东西(无法获得任何相关文档)。

    最佳答案

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

    关于angularjs - Angular UI 路由器,如何从 Controller 获取当前状态的祖先列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28607140/

    相关文章:

    javascript - AngularJS 将子状态参数插入 $urlRouterProvider (UI-Router)

    angularjs - 当 session 在Firebase中过期时,如何使用UI路由器重定向

    javascript - 使用 Protractor 检查 Angular ui 路由状态

    javascript - 过渡期间 AngularJS SubForm 的性能

    javascript - 如何使用 AngularJS 1.5 创建具有动态路由的动态页面

    javascript - 如果数据不存在,如何用 0 填充数组?

    javascript - 如何从 angularjs 中的 Controller 调用 Ui-Bootstrap 0.10.0 中的 $modal.open

    angularjs - 提高 Angular 应用程序中的 TinyMCE 性能

    angularjs - 在 ng-repeat 中动态添加指令

    javascript - 在 Angular 1.x.x ES6 中注入(inject)工厂