简体   繁体   English

提交具有许多动态创建的输入的AngularJS表单

[英]submit AngularJS form with many dynamically created inputs

I am generating a set of three inputs per object in a JSON array. 我在JSON数组中为每个对象生成一组三个输入。 This is a simple mockup showing how I do this for two objects. 这是一个简单的模型,显示了我如何对两个对象执行此操作。 I cannot seem to figure out how to grab all the inputs and submit it "the AngularJS way." 我似乎无法弄清楚如何获取所有输入并以“ AngularJS方式”提交。 Note that I chose to use ng-value over ng-model for the first two number inputs since the former collides with bootstrap in a really ugly way. 请注意,我选择对前两个number输入使用ng-value不是ng-model ,因为前两个以非常丑陋的方式与bootstrap冲突。

Is there some straightforward way to just grab all the input values and submit them, like you would do with a standard form? 是否有一些简单的方法可以像获取标准表单一样,仅获取所有输入值并提交它们?

HTML: HTML:

<form name="editForm" class="form-horizontal" ng-submit="saveEdit()">
<table class="edit_table table table-striped">
        <thead>
          <tr>
            <th class="action_name_cell">Action</th>
            <th class="float_cell">Warning Threshold</th>
            <th class="float_cell">Error Threshold</th>
            <th class="toggle_cell">Enabled</th>
          </tr>
        </thead>
        <tbody>
          <tr ng-repeat="row in edit_rows()">
            <td class="action_name_cell">test</td>
            <td class="float_cell">
              <div class="form-group">
                <div class="col-sm-8">
                <input type="number" class="form-control" name="{{row.threshold_id}}_warningDecimal"
                       placeholder="10.0" ng-value="row.warning"
                       ng-pattern="/^[0-9]+(\.[0-9]{1,2})?$/"
                       step="0.1" required />
                </div>
              </div>
            </td>
            <td class="float_cell">
              <div class="form-group">
                <div class="col-sm-8">
                <input type="number" class="form-control" name="{{row.threshold_id}}_errorDecimal"
                       placeholder="10.0" ng-value="row.error"
                       ng-pattern="/^[0-9]+(\.[0-9]{1,2})?$/"
                       step="0.1" required />
                </div>
              </div>
            </td>
            <td class="toggle_cell">
              <label></label><input name="{{row.threshold_id}}_enabled" type="checkbox" ng-checked="row.enabled" data-toggle="toggle">
            </td>
          </tr>
        </tbody>
      </table>
  <div class="base_button_wrapper">
    <button type="submit" class="btn btn-success">Save</button>
    <button ng-click="cancelEdit()" type="button" class="btn btn-default">Cancel</button>
  </div>
</form>

JS: JS:

angular.module('rtmApp')
  .controller('EditCtrl', ['$scope', '$location', '$window', '$timeout',
    function ($scope, $location) {

      // Change views and show the main view
      $scope.cancelEdit = function() {
        $location.path('/');
      };

      // Save, confirm success, then show the main again
      $scope.saveEdit = function() {
        console.log('Here is the data we are saving...');
        // Let's see if we can see the data we are saving/submitting here:
        console.log("? How do I get all the data ?");
        $location.path('/');
      };


      var dummyEditJSON = [{
                            "threshold_id": 1,
                            "action_id": 1,
                            "action_name": "fast_preview",
                            "site_id": 1,
                            "site_name": "test_site",
                            "warning": 3.5,
                            "error": 5.0,
                            "enabled": true
                          },
                          {
                            "threshold_id": 2,
                            "action_id": 2,
                            "action_name": "bill_cgi",
                            "site_id": 1,
                            "site_name": "test_site",
                            "warning": 2.6,
                            "error": 4.2,
                            "enabled": false
                          }
                        ];
      $scope.edit_rows = function() {
        return dummyEditJSON;
      };


  }]);

Your inputs have to be binded to an object. 您的输入必须绑定到对象。 You do that with the ng-model directive. 您可以使用ng-model指令执行此操作。 Take a look at this example: http://jsfiddle.net/krvom1ja/ 看一下这个例子: http : //jsfiddle.net/krvom1ja/

$scope.data = {
        a: 'a',
      b: [{
        v: 'b'
      }, {
        v: 'c'
      }]
    }

Assuming this is your form data, you keep it all in the same place. 假设这是您的表单数据,则将其全部保存在同一位置。 Then, when you submit the form, you simply grab $scope.data. 然后,当您提交表单时,您只需获取$ scope.data。

Also, your array of inputs is an actual array (look at key b ) 另外,您的输入数组是一个实际的数组(请参见键b

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM