这是我的问题Recursion with ng-repeat in Angular,但不是重复的。现在我知道该怎么做了,但我在问为什么我目前解决这个问题的方法不起作用。
我正在忙着调整巨大的Metronic
Angular主题,我的第一个任务是从REST API动态加载侧面菜单项。在主index.html
页面(仅使用的页面:做水疗中心)中侧面meny的容器看起来像这样:
<div data-ng-include="'tpl/sidebar.html'" data-ng-controller="SidebarController" class="page-sidebar-wrapper"></div>
然后sidebar.html
看起来像这样:
<div class="page-sidebar navbar-collapse collapse">
<ul class="page-sidebar-menu" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200"
ng-class="{'page-sidebar-menu-closed': settings.layout.pageSidebarClosed}"
rsng-menuItem="menuItems">
</ul>
</div>
您会注意到我的自定义指令rsng-menuItem
,用于递归菜单树:
angular.module("ReflexPortalApp").directive("rsngMenuItem", ["$parse", function ($parse) {
return {
restrict: "A",
scope: true,
templateUrl: "/tpl/sidebar/menu-item.html",
link: function (scope, element, attrs) {
scope.List = $parse(attrs.rsngMenuItem)(scope);
}
}
}]);
它的模板如下所示:
<li ng-repeat="item in List" ng-class="{\'nav-item\': !item.IsHeading, \'start\': item.IsStart}">
<a href="{{item.Href}}" ng-class="{\'nav-link nav-toggle\': item.subItems && item.subItems.length > 0}">
<i ng-if="{{item.Icon && item.Icon.length > 0}}" class="icon-{{item.Icon}}"></i>
<span class="title">{{item.Text}}</span>
<span ng-if="{{item.DecorClass || item.DecorText}}" class="{{item.DecorClass}}">{{item.DecorText}}</span>
</a>
<ul rsng-menuItem="item.subItems" class="sub-menu"></ul>
</li>
在SideBarController1, the menu items do load successfully from the REST API, and are assigned to the
menuItems`范围属性中,它们应该可用于绑定。
最后,菜单项在JSON中显示如下:
{
"IsDisabled": "0",
"seq": 2,
"Href": "javascript:;",
"Id": "2",
"IsStart": "0",
"IsNavItem": "1",
"DecorText": null,
"ApiCall": null,
"Index": 3,
"Text": "Accounting",
"Icon": "settings",
"ParentId": null,
"DecorClass": "arrow",
"subItems": [
{
"DecorClass": "arrow",
"ParentId": "2",
"Icon": "wrench",
"Text": "Statement",
"Index": 1,
"ApiCall": "statement&CustID=4446&statementdate=2016-05-01",
"DecorText": null,
"IsNavItem": "0",
"IsStart": "0",
"Id": "3",
"Href": "list",
"seq": 1,
"IsDisabled": "0"
}
]
}
当我开始,并且不知道如何在模板中进行递归时,我只是使用递归代码循环和jQuery来“手动”构造并填充每个菜单项的所有元素,并且工作正常,但是用代码文字编写HTML很糟糕。
现在我只是得到一个空的侧面菜单,在控制台中没有错误(必须喜欢Angular的那部分),并且想知道我是否做了明显错误的事情。
答案 0 :(得分:0)
问题在于你的指令名,angular只是不能识别你的指令,因为它不能很好地处理属性名中的大写字母。将rsng-menuItem
重命名为rsng-menu-item
。
然而,这不起作用,因为你不能只是以角度递归地嵌套指令,它将以无限循环结束。
有多种解决方案,请查看Recursion in Angular directives和 https://github.com/marklagendijk/angular-recursion