将输入字段绑定到 Angularjs 中的数组

Binding input fields to Array in Angularjs

本文关键字:数组 Angularjs 输入 字段 绑定      更新时间:2023-09-26

我有一个简单的问题,我真的找不到解决方案。 所以我愿意做的是从输入插入数组值。

因此,例如,我首先在我的控制器上有这个空数组:

   $scope.contents =  [
    {name: "", value: ""}
 ] ; 

我有三个输入字段,每个字段都有一个标签和一个值:

    <label>1st Label</label>
    <input type='text' value='1st Value' />
    <label>2nd Label</label>
    <input type='text' value='2nd Value' />
    <label>3rd Label</label>
    <input type='text' value='3rd Value' />

我想通过单击一个按钮将标签和每个输入的值添加到数组中,我希望自动生成值和标签的 ng 模型名称,因此在 ng 模型中,我想放置类似这样的东西 ng-model=val[$index]

迭代

所以结果应该是

   $scope.contents =  [
        {label: "1st Label", value: "1st Value"},
        {label: "2nd Label", value: "2nd Value"},
        {label: "3rd Label", value: "3rd Value"}
    ] ; 

任何帮助将不胜感激

给定此 HTML:

  <body ng-controller="MyController">
    <label ng-repeat-start="label in labels">Label {{label}}</label>
    <input ng-model='values[$index]' type='text' value='' />
    <br ng-repeat-end>
    <button ng-click="saveEverything()">Save</button>
  </body>

假设你有一个名为 myApp 的变量,其中包含您的主应用程序,您将创建如下所示的控制器:

var myApp = angular.module('app', []);
myApp.controller('MyController', function($scope, $log) {
  $scope.labels = ['one', 'two', 'three'];
  $scope.values = new Array($scope.labels.length);
  $scope.saveEverything = function() {
    $scope.contents = [];
    for (i = 0; i < $scope.labels.length; i++) {
      $scope.contents.push({
        label: $scope.labels[i],
        value: $scope.values[i]
      });
    }
    $log.info('Saved to array[0]: ' + $scope.contents[0].value);
    $log.info('Saved to array[1]: ' + $scope.contents[1].value);
    $log.info('Saved to array[2]: ' + $scope.contents[2].value);
  }
});

演示:http://plnkr.co/edit/JCCa1f?p=preview(使用浏览器的 Javascript 控制台查看数组中的值)

每次按 Save 时,这将擦除 $scope.content 数组,然后在其中放置三个对象,每个输入一个对象。

不过,我不确定你为什么要这样做,所以如果这不是你要找的,也许你可以稍微扩展一下你的问题,让你的问题和需要更清楚一点。

使用初始值初始化内容变量:

$scope.contents =  [
    {name: "Label 1", value: ""},
    {name: "Label 2", value: ""},
    {name: "Label 3", value: ""}
 ] ; 

使用如下表单生成输入字段:

<div ng-repeat="content in contents">
    <label>{{content.name}}</label>
    <input type='text' value='{{content.value}}' ng-model="content.value"/>
</div>

最后,您不需要 saveEverything,因为 content.values' 将与 $scope.contents 变量绑定,因此当输入字段上的值更改时,内容变量上的值将是最新的。