javascript - 带有 Angular Directive(指令)的嵌套树列表

标签 javascript angularjs

我在使用 Angular 的嵌套列表指令时遇到问题。每次我尝试运行代码时,当我递归调用该指令时,浏览器都会崩溃。

如果数据中的 children 属性包含项目,我想输出一个新的列表项。

这是我的代码的一个 fiddle ,我删除了对自身的指令调用,这样它就不会导致浏览器崩溃。 http://jsfiddle.net/8p3bf4ec/

JS:

var jsonData = {
    "title": "Home",
    "author": "Mary",
    "children": [
        {
            "title": "Clothing",
            "author": "Robert",
            "children": [
                {
                    "title": "Shirts",
                    "author": "Bill",
                    "children": []
                }
            ]
        },
        {
            "name": "Electronics",
            "author": "William",
            "children": []
        }
    ]
};

angular.module('myApp', []);

angular.module('myApp').directive('itemList', function() {
    return {
        scope: true,
        templateUrl: 'itemListTemplate.html',
        controller: function($scope) {
            $scope.nodes = jsonData;
            console.log($scope.nodes);
        }
    };
});

模板:

<div ng-app="myApp">

    <item-list></item-list>

    <script type="text/ng-template" id="itemListTemplate.html">
        <ul>
            <li ng-repeat="node in nodes">
                {{node.title}}
            </li>
        </ul>
        <!-- Removed this because it makes the browser crash
        <item-list></item-list>
        -->
    </script>

</div>

最佳答案

这是因为您无限迭代 jsonData 而不是每个节点的子节点。我想你根本不应该在这里使用指令,因为没有太多逻辑,而且它增加了不必要的复杂性。只需使用 ng-include 而不是指令。像这样的事情:

<script type="text/ng-template" id="tree-view">
<ul>
    <li ng-repeat="item in items">
        <!-- any data you want to display from item itself -->
        <div
            ng-if="item.children && item.children.length"
            ng-init="items=item.children"
            ng-include="'tree-view'">
        </div>
    </li>
</ul>
</script>

<div class="tree-view" ng-include="'tree-view'"></div>

关于javascript - 带有 Angular Directive(指令)的嵌套树列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29211930/

相关文章:

javascript - 绑定(bind)到 SVG 组元素但在子元素上触发并在另一个元素上完成的单击事件的行为是什么?

javascript - 无法设置具 Angular 元素的 css 属性

javascript - 在 JavaScript 中创建两个数字之间的范围

javascript - 如何根据 Angular 环境更改 index.html 中的变量值

javascript - 陷入 karma 报应验证作业(nodejs,angularjs)

javascript - AngularJS + ag-grid : sticky/remembered selections with virtual paging/infinite scrolling

javascript - 外部文件中的 AngularJs Controller 并使用路由

javascript - 使用动态 id 更新按钮的 CSS

javascript - 如何解决导航栏与正文内容或 CSS 中其他页面重叠的问题

javascript - 如何在不使用 $_POST 的情况下获取下拉列表中所选项目的值并传递它