如何在angularjs中以编程方式生成多级菜单项?

时间:2016-03-09 07:18:01

标签: javascript angularjs

我正在创建一个从json以编程方式生成的侧面菜单栏。

我编写了两个级别的项目,但我在html中硬编码了两个级别的ulLi项目。 但我不想硬编码菜单项的级别。

我尝试过以下代码。

HTML

<ul class="sidebar-menu sidebar-nav" ng-repeat="m in modulos">
    <li class="treeview" ng-repeat="(itemIndex, item) in modulos">
        <a ng-click="showSubmenu(itemIndex)">
            <i class="fa fa-table"></i> <span>{{item.module}}</span>
        </a>

        <ul class="sub-nav" ng-show="isShowing(itemIndex)">
            <li ng-repeat="sub_element in m.submodule">
                <a href="{{sub_element.url}}">{{sub_element.res}}</a>
            </li>
        </ul>
    </li>
</ul>

JS

$scope.modulos = [{
    "module":"Admin System ",
    "adm_modulo_id":1,
    "submodule": [{
        "res":"Angular","url":"#",
        "submodule":[{
            "res":"Angular",
            "url":"#/admin/1"
        },{
            "res":"Linux",
            "url":"#/admin/2"
        },{
            "res":"Server",
            "url":"#/admin/3"
        }]
    },{
        "res":"Linux",
        "url":"#/admin/2"
    },{ 
        "res":"Server",
        "url":"#/admin/3"
    }]

}];

这里我编写了两个级别的项目。但它是一个变量。有些项目有5个等级,另有一个有2个等级。

所以基于子模块,我需要写一个逻辑。

1 个答案:

答案 0 :(得分:1)

你可以像其他所有&#34;树一样进行递归。问题。带有角度的html中的递归是使用html中的模板完成的,例如:

<script type="text/ng-template" id="list_node.html">
    ........
    <ul>
        <li ng-repeat="node in node.children" ng-include="list_node.html"></li>
    </ul>
</script>

在上面我的片段中点的位置,您将定义要显示的内容(节点项上的数据)。示例:<p>{{node.name}}</p>

然后在你的ng-repeat中你只需要包含模板。示例:

<ul class="node-indented slide">
    <li ng-repeat="node in node.children" ng-include="'list_node.html'"></li>
</ul>

将此示例调整为您的用例,它将起作用。