我正在尝试使用 AngularJS 创建树视图。
这是我的代码:
module.directive('treeview', function () {
return {
restrict: 'E',
templateUrl: "/templates/ui/controls/treeview.htm",
replace: true,
transclude: true,
scope: {},
link: function (scope, element, attrs) {
console.log("treeview directive loaded");
},
controller: function ($scope, $rootScope) {
$rootScope.depth = 0;
$scope.items = [
{ text: "face" },
{ text: "palm" },
{
text: "cake",
childitems: [
{ text: "1 face" },
{ text: "1 palm" },
{ text: "1 cake" }
]
}
];
}
};
});
module.directive('treeviewItem', function () {
return {
restrict: 'E',
templateUrl: "/templates/ui/controls/treeview-item.htm",
replace: true,
scope: {
item: "="
},
link: function (scope, element, attrs) {
console.log("treeview item directive loaded");
}
};
});
树视图模板:
<div class="sl-treeview">
<ul class="clear" ng-transclude>
<treeview-item ng-repeat="item in items" item="item"></treeview-item>
</ul>
</div>
树视图项目模板:
<li>
<i class="icon-plus-sign"></i>
<a href="/">
<i class="icon-folder-close"></i>
{{item.text}}
</a>
<!-- This ul is the issue - it crashes the page -->
<ul>
<treeview-item ng-repeat="childitem in item.childitems" item="childitem"></treeview-item>
</ul>
</li>
在 treeview 指令$scope.items
中为开发而硬编码 - 最终我希望这将来自从服务器中提取数据的控制器/服务。然而,它代表了我正在寻找的那种基本结构。
当我在 treeviewItem 中没有嵌套 ul 的情况下运行它时,它给了我前三个项目就好了。当我添加 ul 以尝试让控件与子项绑定时,它会处理页面并停止工作。
没有嵌套 ul 的 JSFiddle - 工作:
带有嵌套 ul 的 JSFiddle - 不起作用(并且可能会挂起您的浏览器!):
我应该如何制作一个使用自定义指令和 ngRepeat 的控件来创建潜在的无限递归级别?为什么我的方法不起作用?