recursion - 使用嵌套对象时,如何在 AngularJS 中制作递归模板?

标签 recursion angularjs

我正在尝试从 JSON 对象动态构建表单,其中包含嵌套的表单元素组:

  $scope.formData = [
  {label:'First Name', type:'text', required:'true'},
  {label:'Last Name', type:'text', required:'true'},
  {label:'Coffee Preference', type:'dropdown', options: ["HiTest", "Dunkin", "Decaf"]},
  {label: 'Address', type:'group', "Fields":[
      {label:'Street1', type:'text', required:'true'},
      {label:'Street2', type:'text', required:'true'},
      {label:'State', type:'dropdown',  options: ["California", "New York", "Florida"]}
    ]},
  ];

我一直在使用 ng-switch block ,但它对于嵌套项目来说变得站不住脚,就像上面的 Address 对象一样。

这是 fiddle : http://jsfiddle.net/hairgamiMaster/dZ4Rg/

关于如何最好地解决这个嵌套问题有什么想法吗?非常感谢!

最佳答案

我认为这可以帮助你。这是我在Google Group上找到的答案关于树中的递归元素。

建议来自 Brendan Owen:http://jsfiddle.net/brendanowen/uXbn6/8/

<script type="text/ng-template" id="field_renderer.html">
    {{data.label}}
    <ul>
        <li ng-repeat="field in data.fields" ng-include="'field_renderer.html'"></li>
    </ul>
</script>

<ul ng-controller="NestedFormCtrl">
    <li ng-repeat="field in formData" ng-include="'field_renderer.html'"></li>
</ul>

建议的解决方案是使用一个模板,该模板使用 ng-include 指令在当前元素有子元素时调用自身。

在您的情况下,我会尝试使用 ng-switch 指令创建一个模板(像您一样,每种类型的标签一个案例),并在末尾添加 ng-include (如果有任何子标签)。

关于recursion - 使用嵌套对象时,如何在 AngularJS 中制作递归模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15661289/

相关文章:

java - 从 int 中删除的方法

php递归获取所有可能的字符串

java - 堆栈溢出错误(Java)

javascript - 为什么我的电子邮件标签传递的是空电子邮件属性?

javascript - webpack-dev-server 未在 html 或 sass 更改时重新加载

postgresql - PostgreSQL 中的递归查询。选择 *

angularjs - 如何在 ng :pluralize 中格式化数字

javascript - ng-admin 不会显示下拉列表中存储的值

asp.net-mvc - 如何使用 ASP.Net MVC5 和 OWIN 返回 StatusCode 401

java - 霍夫施塔特的 Q 序列