Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 延迟加载的角度树指令_Angularjs_Tree_Lazy Loading - Fatal编程技术网

Angularjs 延迟加载的角度树指令

Angularjs 延迟加载的角度树指令,angularjs,tree,lazy-loading,Angularjs,Tree,Lazy Loading,我们正在使用angularJS:)启动一个新项目,其中一个需求是树控件。 树控件应该支持“延迟加载”,这样我们可以在使用AJAX获得更多数据时动态地向它添加节点 我看到了下面的2条指令,但我认为不支持“延迟加载” 所以,在我开始自己开发之前,我要问你们:) 我看到的两个漂亮的树指令: 谢谢,Avi因为AngularJS在任何逻辑之前都会加载指令,所以不能很好地将它们用于递归操作,否则一开始可能不需要指令 然而,一个非常令人愉快的解决方法是使用ng include,因为它没有上述限制。然后做一

我们正在使用angularJS:)启动一个新项目,其中一个需求是树控件。 树控件应该支持“延迟加载”,这样我们可以在使用AJAX获得更多数据时动态地向它添加节点

我看到了下面的2条指令,但我认为不支持“延迟加载” 所以,在我开始自己开发之前,我要问你们:)

我看到的两个漂亮的树指令:


谢谢,Avi

因为AngularJS在任何逻辑之前都会加载指令,所以不能很好地将它们用于递归操作,否则一开始可能不需要指令

然而,一个非常令人愉快的解决方法是使用ng include,因为它没有上述限制。然后做一棵树非常简单

在你想植树的地方,你有

    <ul class="tree-container">
        <li style="margin: 5px; list-style: none;" ng-repeat="d in vm.features" ng-include="'tree_item_renderer.html'"></li>
    </ul>
然后include看起来像这样

<script type="text/ng-template" id="tree_item_renderer.html">
    <span ng-click="d.expand = !d.expand;vm.getChildNodes(d)" ng-show="!d.expand && d.hasChildren"><i class="fa fa-fw fa-plus-circle"></i></span>
    <span ng-show="d.expand && d.hasChildren" ng-click="d.expand = !d.expand;d.children=null" ><i class="fa fa-fw fa-minus-circle"></i></span> 
    <span ng-show="!d.hasChildren" style="margin-left:28px"></span>

    <ul>
        <li style="list-style:none;" ng-repeat="d in d.children" ng-model="d" ng-include="'tree_item_renderer.html'"></li>
    </ul>
</script>

在控制器vm.getChildNodes(d)调用中,您可以获取当前扩展节点的子节点。我展开节点,然后通过odata异步地对每个节点进行计数,以确定节点是否有子节点,这样我就可以显示其中一个子节点是否有自己的子节点,但当然,如果您能够控制它,您可以更有效地在数据库中跟踪它(我想我自己会为此更新模型)

请注意,我已经实现了它,因此如果您打开并关闭,然后再打开,它实际上会重新加载节点。当然,您不必这样做,但这样我就不用再执行“重新加载/刷新”按钮了,而且用户不会因为没有更好的事情可做而一遍遍地打开/关闭树

我的另一个优势是,我为一些(大多数)节点实现了用户输入,例如,选择它们,为它们输入值。我注意到,如果这些只存在于“按需”模式中,效率会更高