JavaScript具有从响应生成的角度嵌套对象模型(无限深)
JavaScript with Angular nested object model generating from response (infinite deep)
我有一个角度应用程序,它正在从服务器获取关于特定对象的响应。这应该为用户生成可以填充并发送回服务器的UI。
响应是一个JSON对象,其中包含数据的"节点"。里面可以有另一个节点。就像树视图。
问题是,对于这样的响应,我能够使用ng模板生成第一层。
这是一个工作代码笔的例子,我正试图得到工作。http://codepen.io/anon/pen/NNMepw
响应结构为:
{
"name": "MainNameOfOption",
"type": "object",
"properties": {
"propertyOne": {
"name": "Option1",
"type": "object",
"properties": {
"ID": {
"name": "ID",
"type": "text",
"properties": {},
"enum": []
}
},
"enum": null
},
"propertyTwo": {
"name": "Option2",
"type": "object",
"properties": {
"enabled": {
"name": "Field",
"type": "boolean",
"properties": {},
"enum": []
},
"Option": {
"name": "Option",
"type": "list",
"properties": {},
"enum": ["Option1", "Option2", "Option3", "Option4"]
},
"Objective": {
"name": "Objective",
"type": "object",
"properties": {
"GoNext": {
"name": "GoNext",
"type": "text",
"properties": {},
"enum": []
},
"GoBack": {
"name": "GoBack",
"type": "text",
"properties": {},
"enum": []
}
},
"enum": null
},
"Holder": {
"name": "Holder",
"type": "object",
"properties": {
"Type": {
"name": "Type",
"type": "list",
"properties": { },
"enum": ["Option1", "Option2", "Option3", "Option4"]
}
},
"enum": null
},
},
"enum": null
}
},
"enum": null
};
}
]);
因此,这应该创建一个UI。UI需要根据它是哪种类型的选项而动态生成。生成视图的HTML是:
<body>
<div ng-controller="basicDemoCtrl">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<div class="col-sm-12">
</div>
<script type="text/ng-template" id="nodes_renderer.html">
<div>
<label > {{ node.name }}: </label>
<input type="checkbox" ng-if="node.type == 'boolean'"
ng-model="result[parent.name][node.name]" ng-init="result[parent.name][node.name] = result[parent.name][node.name] ||
false"></input>
<input type="text" ng-if="node.type == 'text' || node.type == 'int'" ng-model="result[parent.name][node.name]" ng-
init="result[parent.name][node.name] = result[parent.name][node.name] || ''" />
<select ng-if="node.type == 'list'" ng-options="enum as enum for enum in node.enum" ng-model="result[parent.name]
[node.name]" ng-init="result[parent.name][node.name] = result[parent.name][node.name] || ''" > <option value=""> </option>
</select>
</div>
<ol>
<li ng-repeat="node in node.properties" ng-include="'nodes_renderer.html'">
</li>
</ol>
</script>
<div class="row">
<div class="col-sm-6">
<div id="tree-root">
<ol ng-model="Object.properties">
<li ng-repeat="node in Object.properties" ng-init="parent = node" ng-include="'nodes_renderer.html'"></li>
</ol>
</div>
</div>
<div class="col-sm-6">
<pre class="code">{{ result | json }}</pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
所以现在我可以从创建JSON对象
我期望创建的模型是:
{
"Option1": {
"ID": ""
},
"Option2": {
"Option": "",
"Field": false,
"Holder" : {
"Type": "Option1",
}
"Objective" : {
"GoBack": "",
"GoNext": ""
}
}
}
但遗憾的是,我被这样创建的对象卡住了:
{
"Option1": {
"ID": ""
},
"Option2": {
"Option": "",
"Field": false,
"Type": "",
"GoBack": "",
"GoNext": ""
}
}
正如您所看到的,我能够制作生成对象的第一层,以便将其正确地拆分为PropertyOne和PropertyTwo,但我不能以某种方式强制在PropertyTwo中生成对象。
我陷入了困境。有人有同样的问题吗?是否成功在嵌套对象内生成动态对象?
我在上面附上了"几乎"工作的代码笔链接。
正如我看到的您的澄清-为什么不创建一个专用服务器来解析JSON并直接创建树模型,而不是作为角度模板渲染的副作用。
相关文章:
- 如何迭代json对象的嵌套属性并创建新的数组列表
- 用于动态创建对象的嵌套循环
- JavaScript对象表示嵌套对象未定义
- Knockoutjs在嵌套对象上嵌套foreach
- 将此(对象)传递到一个对象方法嵌套方法中
- 通过对象的嵌套集合进行递归总是在第一个叶节点处终止
- 如何获取对象中嵌套对象的数量
- 如何动态获取对象的嵌套属性
- 如何在 AngularJs 中获取 json 对象和嵌套对象属性名称和值
- 如何检查一个对象是否嵌套在另一个对象的属性中作为属性
- AngularJS指令:将动态创建的对象作为嵌套指令的属性传递
- Javascript 递归地排序对象和嵌套对象以及数组
- 迭代使用对象键嵌套的数组
- angularjs的ng选项中的解析对象使用嵌套json选择下拉菜单
- 为ES5或ES6中对象的嵌套属性简明定义Getter和Setter
- 检查对象的嵌套项的值
- 正在检索对象中嵌套的值
- 从JavaScript对象创建嵌套的无序列表(它可以是n级深度)
- Javascript对象文字-嵌套函数和"this"关键字
- 如何检查JavaScript对象中嵌套的键是否可用