javascript - Angular 1.5 和多重嵌套数据结构

标签 javascript angularjs performance optimization data-structures

我有一个嵌套结构,如下例所示:

let structure = [{
  section: '1',
  title: 'First lvl title',
  children: [{
    section: '1.1',
    title: 'Second lvl title',
    children: []
  }, {
    section: '1.2',
    title: 'Second lvl title',
    children: [{
      section: '1.2.1',
      title: 'Third lvl title',
      children: []
    }, {
      section: '1.2.2',
      title: 'Third lvl title',
      children: []
    }]
  }, {
    section: '1.3',
    title: 'Second lvl title',
    children: []
  }]
}, {
  section: '2',
  title: 'First lvl title',
  children: [{
    section: '2.1',
    title: 'Second lvl title',
    children: []
  }, {
    section: '2.2',
    title: 'Second lvl title',
    children: []
  }]
}, ...other objects]

如您所见,结构类似于目录 - 我有代表单元的对象,每个单元都有自己的部分编号、标题和带有子部分的数组。

数据的特点是我永远不知道我有多少个节和多少个嵌套的子节。我需要假设我可以获得大约 2000 个具有不同配置的对象(也许更多)。另外,我无法预测最大嵌套级别,并且特定部分的最大嵌套级别可能有所不同。

我正在尝试找到最优化的方法来将此结构表示为 HTML 页面。我正在考虑使用 ng-repeat 但我不知道这是否是一个好主意,因为我不知道我会有多少深级别。另外,生成 HTML 页面后,我可以删除一个部分(例如第 1 部分),并且我需要重新计算每个其他部分和小节的节号(第 2 部分现在是第 1 部分,第 2.1 小节现在是第 1.1 小节,依此类推) )。对如此大量的数据处理此操作的最佳方法是什么?

最佳答案

您需要一个递归模板,其中的结构是什么以及数据的深度有多深都无关紧要。您可以使用递归自定义指令或递归 ngInclude:

<script type="text/ng-template" id="categoryTree">
    {{ category.title }}
    <ul ng-if="category.categories">
        <li ng-repeat="category in category.categories" ng-include="'categoryTree'">           
        </li>
    </ul>
</script>

http://benfoster.io/blog/angularjs-recursive-templates

关于javascript - Angular 1.5 和多重嵌套数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39712577/

相关文章:

javascript - 使用 jquery 提交一个在不同选项卡上包含多个不同字段的表单。

angularjs - Angular - 理解指令隔离范围方法

javascript - 如何为 Angular js 应用程序添加加载 DIV?

java - Hibernate @LazyCollection 注解有什么用

c# - JIT 编译器及其在 C++ 前加速 .net 程序执行的好处

javascript - 测试无法识别相同的元素

javascript - 将 AngularJS 应用程序的修改状态保存到 URL

javascript - JQuery:淡入/淡出效果

javascript - 如何从选项中获取angularjs http请求url

python - Python排序列表时传入reverse=True会影响效率吗?