javascript - 多菜单级别 Angular js

标签 javascript angularjs metronic

我想循环遍历菜单和子菜单数组(可能是子菜单的子菜单)。

我使用metronic模板(查看此链接的倒数第二项Metronic Template(“多级菜单”)

我有这样的结构:

$scope.dashitems = [{
    title: 'Company',
    icon: 'icon-layers',
    href: '#/dashboard1',
    isActive: path === '/dashboard1'
}, {
    title: 'Buildings',
    icon: 'icon-layers',
    href: '#/Buildings',
    isActive: path === '/Buildings'
}, {
    title: 'Floors',
    icon: 'icon-layers',
    href: '#/Floors',
    isActive: path === '/Floors'
}, {
    title: 'Spaces',
    icon: 'icon-layers',
    href: 'javascript:;',
    isActive: path === '/Spaces',
    subitems: [{
        title: 'OpenSpaces',
        icon: 'icon-layers',
        href: '#/OpenSpaces',
        isActive: path === '/OpenSpaces',
        subitems: [{
            title: 'OpenSpaces2',
            icon: 'icon-layers',
            href: '#/OpenSpaces2',
            isActive: path === '/OpenSpaces2',
        }]
    }, ]
}, {
    title: 'Meeting',
    icon: 'icon-layers',
    href: '#/meeting',
    isActive: path === '/meeting'
}];

这不起作用:

function printList(dashitems){
            $scope.menu = '<ul>';
            angular.forEach(dashitems, function(value, key) {
                $scope.menu+="<li>";
                if(value.hasOwnProperty('subitems')){


                  $scope.menu=' <a ng-href="{{ value.href }}" class="nav-link nav-toggle">'+
                              '<i ng-class="value.icon"></i>'+
                              '<span class="title">{{ value.title }}</span>'+
                              '<span class="arrow open"></span>'+
                          '</a>';


                  printList(value.subitems);
                }else{

                   $scope.menu+="<a href='javascript:;' class='nav-link nav-toggle'>"+
                      "<i class='value.icon'></i>"+
                      "<span class='title'>{{value.title}}</span>"+
                  "</a></li>";
                }
            });
            $scope.menu += "<ul>";
            return $scope.menu;
        }

如何循环此结构并生成“多级菜单”的相同 html?

编辑:

angular
  .module('app').directive('menuBar', function() {
    return {
      restrict: 'E',
      controller: ['$scope', '$location', function($scope, $location) {
        //function & dashitems
            $scope.printList($scope.dashitems);
      }]
    }   
});

最佳答案

您可以创建一个指令来递归地创建列表。

<menu ng-model="dashItems"></menu>

该指令应该做一些类似的事情:

  1. 创建函数 printList(dashItems)
  2. 打开 ul 元素
  3. 迭代dashItems,为每个item生成一个li元素
  4. 如果某个项目 hasOwnProperty('subItem'),则递归调用 printList(dashItems.subitem)
  5. 最后关闭 ul 元素并返回列表。

现在你只需要做:element.append(printList(dashItems))

这是一种高级方法,但我认为它可能有用。

已编辑:我将帮助您创建该功能:

function printList(dashitems){
            $scope.menu = '<ul>';
            angular.forEach(dashitems, function(value, key) {
                $scope.menu+="<li>";
                if(value.hasOwnProperty('subitems')){

                  $scope.menu=' <a ng-href="{{ value.href }}" class="nav-link nav-toggle">'+
                              '<i ng-class="value.icon"></i>'+
                              '<span class="title">{{ value.title }}</span>'+
                              '<span class="arrow open"></span>'+
                          '</a>';


                  printList(value.subitems);
                }else{

                   $scope.menu+="<a href='javascript:;' class='nav-link nav-toggle'>"+
                      "<i class='value.icon'></i>"+
                      "<span class='title'>{{value.title}}</span>"+
                  "</a>";
                }
                $scope.menu+="</li>";
            });
            $scope.menu += "<ul>";
            return $scope.menu;
        }

我认为这可行

angular
  .module('app').directive('menuBar', function() {
    return {
      restrict: 'E',
      scope: {
          list: '=dashitems'
      }
      controller: ['$scope', '$location', function($scope, $location) {
        //function & dashitems
            $scope.printList($scope.dashitems);
      }]
    }   
});

关于javascript - 多菜单级别 Angular js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34928698/

相关文章:

javascript - 在 TypeScript 中凝胶化一个类的所有模型属性

javascript - 使用 javascript、jquery 或 angularjs 将 HTML 文本保存到带有换行符、间距、填充和对齐的文本文件

javascript - 如何将 5PM 转换为 Javascript 日期对象?

jquery - 电子邮件验证空白不需要输入

javascript - 从变量设置对象属性

javascript - 为什么 map 图钉上的点击事件不起作用?

javascript - jQuery Autocomplete - 找不到在建议 div 上设置宽度的位置?

javascript - Angular 触发 Div 根据条件点击

html - 仅在悬停时突出显示节拍器图标

symfony - Datatables.net (1.10.22) + Webpack Encore (1.11) + Symfony (5.2.6)