【问题标题】:Add dynamic field to create specific JSON format添加动态字段以创建特定的 JSON 格式
【发布时间】:2015-02-09 01:17:57
【问题描述】:

我正在尝试创建一个带有动态字段的表单来创建一个 JSON 来像这样发布

{
"cpu": "1",
"ram": "128",
"env": {
    "envname1": "value1",
    "envname2": "value2"
}
}

虽然我创建 cpu 和 ram 没有问题,但我无法确定创建“envname”和“value”,因为 envname 应该在动态添加的字段中第一列和第二列中的值。

我也无法将常规字段和动态字段放在一个范围内。

请看http://jsfiddle.net/q9dcn7wj/3/ cpu 和 ram 字段被忽略。当我改变时

    $scope.inputs = [{id: 'choice1'}];

到

     $scope.inputs = {id: 'choice1'};

动态字段被忽略。如何获取范围内的所有内容以将整个表单作为 JSON 提交?

【问题讨论】:

  • 你能提供一些关于什么必须是动态的细节吗? cpu、ram 和 env?只有env? (根据您的小提琴)为什么每个 env 属性显示两个文本字段?
  • 像这样:$scope.toSend = {}; $scope.toSend.inputs = [];
  • 嗯,是的,这就是将要发生的事情。 "push" 将一个项目添加到数组中。如果你声明 $scope.inputs = {id:'choice1'};那不是一个数组。其中 $scope.inputs = [{id:'choice1'}];是一个数组。所以对不是数组的东西进行“推送”不会增加价值。
  • 动态我的意思是envi 的输入字段可以通过单击按钮添加/删除。用户可以以envname和value的形式添加任意数量的env值。

标签: javascript json angularjs forms field


【解决方案1】:

您将inputs 模型视为既是array 又是object。

我建议您在您的 input 模型上创建一个 variables 属性并在其上推送/拼接。

我已经更新了你的JSFiddle,相关代码如下:

JavaScript:

var app = angular.module('myApp', []);

app.controller('MyCtrl', ['$scope', function ($scope) {
    $scope.inputs = { variable: [] };

$scope.addInput = function(){
    $scope.inputs.variable.push({name:'', value:''});
}

$scope.removeInput = function(index){
    $scope.inputs.variable.splice(index,1);
}
}]);

HTML:

<div ng-app="myApp" ng-controller="MyCtrl">

        <input type="text" ng-model="inputs.cpu" />cpu<br />
        <input type="text" ng-model="inputs.ram" />ram

    <div ng-repeat="input in inputs.variable">
        <input type="text" ng-model="input.name" />
        <input type="text" ng-model="input.value" />
        <button ng-click="removeInput($index)">Remove</button>
    </div>
    <button ng-click="addInput()">add input</button>
    <br />
<strong><label for="userDebugText">JSON:</label></strong>
<textarea id="userDebugText">{{inputs|json}}</textarea>
</div>

【讨论】:

  • Thx 这是向前迈出的一步,但我还需要上述格式的 JSON 和 env 的键/值必须来自两个输入字段。所以在你的小提琴中{ "variable": [ { "name": "value", "value": "" } ], "cpu": "1", "ram": "8" }name应该是来自左边字段的输入和来自右边的value
  • 当用户提交表单时,处理你的模型以匹配你想要的格式
  • json 现在不再嵌套,我仍然不知道如何在没有[ 的情况下向env 添加多行但{。我会玩 angular.copy。谢谢这个
猜你喜欢
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 2015-10-25
  • 1970-01-01
相关资源
最近更新 更多