Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS将复选框的值添加到数组中_Javascript_Html_Angularjs_Angularjs Scope_Angularjs Ng Repeat - Fatal编程技术网

Javascript AngularJS将复选框的值添加到数组中

Javascript AngularJS将复选框的值添加到数组中,javascript,html,angularjs,angularjs-scope,angularjs-ng-repeat,Javascript,Html,Angularjs,Angularjs Scope,Angularjs Ng Repeat,我有以下代码: <tr ng-repeat="doc in providers"> <td><input type="checkbox" ng-true-value="{{doc.provider.Id}}" ng-false-value="" ng-model="ids"></td> </tr> {{ids}} {{ids}} 我想获取数组上复选框的值ng true value只接受字符串,因此需要使用变通方

我有以下代码:

<tr ng-repeat="doc in providers">      
  <td><input type="checkbox" ng-true-value="{{doc.provider.Id}}" ng-false-value="" ng-model="ids"></td> 
</tr>

{{ids}}

{{ids}}

我想获取数组上复选框的值

ng true value
只接受字符串,因此需要使用变通方法。一段时间以来,这一直是一个问题。同时,您可以执行以下操作:

在控制器中创建一个
ids
对象,如:

$scope.ids = {};
并更改
ng model
以引用该对象中的键。您可以使用默认的
true/false
复选框值:

<td><input type="checkbox" ng-model="ids[doc.provider.Id]"></td>

然后可以在
ids
中循环键,检查
true


首先,我要说的是,我真的不喜欢在angular中执行此操作的选项。我甚至不能说这比公认的答案更好,但它确实将数据保留在模型中

标记:

<tr ng-repeat='(index, doc) in provider'>
    <td><input type='checkbox' ng-true-value='{{doc.provider.Id}}' ng-model='ids[index]' /></td>
</tr>

<span ng-repeat='id in ids'>{{id}} </span>
当我开始回答这个问题时,我认为最惯用的方法是在输入上添加ng change指令:

<input type='checkbox' ng-true-value='{{doc.provider.Id}}' ng-model='ids[index]' ng-change='updateIds()'/>

不幸的是,这并不像预期的那样有效。删除值时UI未正确更新。我还想指出,您可以在不使用repeat指令的情况下执行此操作:

<input type='checkbox' ng-true-value='1' ng-model='ids.0' />
<input type='checkbox' ng-true-value='2' ng-model='ids.1' />
<input type='checkbox' ng-true-value='3' ng-model='ids.2' />
<input type='checkbox' ng-true-value='4' ng-model='ids.3' />
<input type='checkbox' ng-true-value='5' ng-model='ids.4' />
<input type='checkbox' ng-true-value='6' ng-model='ids.5' />


在这种情况下,$watch肯定比向每个输入添加ng更改要好。最后,这里是一个工作。$watch函数在每次选中或取消选中一个框时都会运行两次,但这就是它必须运行的方式

我发现它提供了我想要的功能。我在使用更常见的解决方案时遇到的主要问题是,我需要两个数组来存储与多选列表兼容的数据。checklistModel指令提供了这一非常基本的功能,并可用于多个模型

为什么不把下面的一个标记为答案呢?
<input type='checkbox' ng-true-value='1' ng-model='ids.0' />
<input type='checkbox' ng-true-value='2' ng-model='ids.1' />
<input type='checkbox' ng-true-value='3' ng-model='ids.2' />
<input type='checkbox' ng-true-value='4' ng-model='ids.3' />
<input type='checkbox' ng-true-value='5' ng-model='ids.4' />
<input type='checkbox' ng-true-value='6' ng-model='ids.5' />