当前位置: 首页 > 面试题库 >

如何使用AngularJS处理数据的递归渲染

卓俊晖
2023-03-14
问题内容

我有一个应用程序,该应用程序具有一组具有递归关系的数据(使用递归的树状视图。)我尝试了几种通过Angular实现此关系的方法,但似乎都没有一种可行的结果。

这里的想法是,我希望使用一组嵌套列表来呈现此数据,以允许许多(7+)深度级别。为了简化操作(我的实际应用程序使用Restangular),我构建了以下插件:

http://plnkr.co/edit/dKT9OvpsMgnxmLwgF0ij

虽然“顶层”数据正确呈现(只是第一个标题),但我使用嵌套控制器递归的尝试似乎失败了。这里的想法是,树中的每个“子代”都使用其自己的控制器进行渲染,然后控制器可以依次渲染其子代。我意识到嵌套控制器可能不是“最佳”方法,但是经过大量搜索之后,我还没有找到“更好”的选择。

重要的是,所得解决方案在此保留“嵌套”的概念(每个元素都出现在其父元素下方,并带有轻微的缩进)。


问题答案:

而不是嵌套您的控制器,而是嵌套数据并仅拥有一个控制器。

该视图由递归引用自己的模板处理。

正如chadermani所链接的那样,那里有一些答案。

这是一个很好的例子的小提琴(不是我的代码

http://jsfiddle.net/brendanowen/uXbn6/8/

和小提琴中的代码

<script type="text/ng-template"  id="tree_item_renderer.html">
    {{data.name}}
    <button ng-click="add(data)">Add node</button>
    <button ng-click="delete(data)" ng-show="data.nodes.length > 0">Delete nodes</button>
    <ul>
        <li ng-repeat="data in data.nodes" ng-include="'tree_item_renderer.html'"></li>
    </ul>
</script>

<ul ng-app="Application" ng-controller="TreeController">
    <li ng-repeat="data in tree" ng-include="'tree_item_renderer.html'"></li>
</ul>

angular.module("myApp", []).
controller("TreeController", ['$scope', function($scope) {
    $scope.delete = function(data) {
        data.nodes = [];
    };
    $scope.add = function(data) {
        var post = data.nodes.length + 1;
        var newName = data.name + '-' + post;
        data.nodes.push({name: newName,nodes: []});
    };
    $scope.tree = [{name: "Node", nodes: []}];
}]);


 类似资料:
  • 问题内容: 我有一个定义相互递归表的模型: 要实际插入问题,我需要怎么做?我需要知道什么是正确的答案。但是要插入答案,我需要知道答案是什么。 如果有问题,我正在运行Postgres。 DDL为: 问题答案: 如果您使用数据修改CTE在 单个语句中 输入问题和答案,那么您甚至都不需要FK约束。更不用说实际制造(或发声)它们了- 这会贵得多。 资料模型 首先,我清理了您的数据模型: 不要使用非描述性的

  • 问题内容: 我的内存中有一个树结构,我想使用Django模板以HTML呈现。 将有一些对象是,并且是的列表。将在模板的内容中传递。 我发现这个的如何可能实现一个讨论,但海报表明,这在生产环境中可能不是很好。 有人知道更好的方法吗? 问题答案: 使用with模板标记,我可以做树/递归列表。 样例代码: 主模板:假设是树的一个或多个根的列表 tree_view_template.html呈现neste

  • 问题内容: 我将如何呈现一个带有嵌套项目的菜单,而该嵌套项目的子对象数量不明,如下面的示例所示,该对象的反应如何? 问题答案: Codesandbox示例 您只需要递归调用Menu组件,其子组件即可显示并作为数据道具传递。

  • 为了概括这个问题,我借用了Zelenski CS课堂讲义中的材料。而且,这与我的具体问题有关,因为几年前我从另一位讲师那里学习了C语言的这种方法。讲义在这里。我对C的理解很低,因为我偶尔使用它。基本上,我需要编写一个程序的几次,我回到课堂材料,找到类似的东西,然后从那里开始。 在本例(第4页)中,Julie正在字符串函数中使用递归算法查找单词。为了减少递归调用的数量,她添加了一个决策点。 为了增加

  • 我想计算我的xhtml页面上的所有元素。我希望每个下一个元素都以更大的顺序放入HashMap中。 private void addComponents(HashMap信息、列表组件、整数顺序、FacesContext上下文){ } 我有作为输出和错误的数字 为什么这两种方法的作用不同?

  • 问题内容: 我想从自己的组件中递归添加一个react组件。我看到了一个树组件的示例,该组件通过子TreeNode进行映射并以相同方式添加子节点。不幸的是,这对我根本不起作用。这个想法是要有一个简单的注释组件,而答复将重用相同的组件。 我收到以下错误消息: 未捕获的TypeError:无法构造“注释”:请使用“ new”运算符,此DOM对象构造函数不能作为函数调用。 这是传递给组件的JSON数据的示