【问题标题】:Recursive Menu in AngularJSAngularJS 中的递归菜单
【发布时间】:2015-04-07 14:03:48
【问题描述】:

我对 AngularJS 完全陌生。我想构建一个具有多个级别的 ListView 类型的菜单。我在网上找到的大多数示例都是开发树结构的。我想要的是一次显示一个级别。我选择了一个现有的例子,如下所示(见JSFiddle):

这是我的 HTML:

<div ng-app="app" ng-controller='AppCtrl'>
    <script type="text/ng-template" id="categoryTree">
        {{ category.title }}
        <ul ng-if="category.categories">
            <li ng-repeat="category in category.categories" ng-include="'categoryTree'" ng-click="DisplayNextLevel($index)">           
            </li>
        </ul>
    </script>
    <ul>
        <li ng-repeat="category in categories" ng-include="'categoryTree'"></li>
    </ul>    
</div>

这是我的 JS:

var app = angular.module('app', []);

app.controller('AppCtrl', function ($scope) {

    // Do something to display next Menu Level
    $scope.DisplayNextLevel = function(Index) {
        $window.alert('Alert!');
        $window.alert(Index);
    };


$scope.categories = [
  { 
    title: 'Computers',
    categories: [
      {
        title: 'Laptops',
        categories: [
          {
            title: 'Ultrabooks'
          },
          {
            title: 'Macbooks'            
          }
        ]
      },

      {
        title: 'Desktops'
      },

      {
        title: 'Tablets',
        categories: [
          { 
            title: 'Apple'
          },
          {
            title: 'Android'
          }
        ]        
      }
    ]
  },

  {
    title: 'Printers'
  }

];

});

我希望程序在启动时只显示第一级项目,即:

o Computers
o Printers

当用户点击计算机时,它应该显示下一级计算机​​,同时删除第一级,即:

Laptops
Desktops
Tablets

等等……

如何修改DisplayNextLevel() 或任何其他方法来实现此目标?

【问题讨论】:

    标签: javascript angularjs recursion angularjs-ng-repeat angular-ui-bootstrap


    【解决方案1】:

    您必须有单独的变量 - currentLevel 和 parentLevl

    http://plnkr.co/edit/rNbEMoC3OrG7YMbl9aFW?p=preview

    $scope.displayNextLevel = function(i) {
      $scope.parentLevel = $scope.currentLevel[i];
      $scope.currentLevel = $scope.currentLevel[i].categories;
    }
    

    【讨论】:

    • 感谢您的快速回复。这是极好的。向下钻取工作完美。现在我需要做什么才能回到层次结构中的上一级?我的意思是从一个较低的级别到上一个/上一个级别。
    • 你可以通过保存所有被点击的索引并回溯路径来实现它
    • 我接受您的答案作为正确答案。但是,如果您在完成此附加任务(即反向钻取)方面提供额外帮助,我将不胜感激。您是说如果级别数未知,我需要保存无限数量的索引吗?你能修改你的代码来显示这个吗?非常感谢。
    • 太棒了。以我有限的知识,我自己无法做到这一点。非常感谢 :-) 能否请您指导我找到一个快速且易于理解的资源,让我可以快速轻松地学习 AngularJS。谢谢!
    • 有很多网站可以学习 Angular。你可以关注我的博客,虽然我不定期更新,ngexample.com
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多