Angularjs 范围更改时,以角度保留复选框状态

Angularjs 范围更改时,以角度保留复选框状态,angularjs,checkbox,retain,Angularjs,Checkbox,Retain,下面是一段代码片段: <tr ng-repeat="data in ioStatusData"> <td><input type="checkbox"></td> <td>{{data.IOStatusName}}</td> <td>{{data.IOLabel}}</td> <td>{{data.IOStatus}}</td> <

下面是一段代码片段:

<tr ng-repeat="data in ioStatusData">
    <td><input type="checkbox"></td>
    <td>{{data.IOStatusName}}</td>
    <td>{{data.IOLabel}}</td>
    <td>{{data.IOStatus}}</td>
    <td>{{data.TestResult}}</td>
</tr>

{{data.IOStatusName}
{{data.IOLabel}
{{data.IOStatus}}
{{data.TestResult}
scope.ioStatusData
每5秒更新一次。我想保留复选框状态(选中或未选中),即使
scope.ioStatusData
发生更改。

您需要

<input type="checkbox" ng-model="myCheckboxIsChecked[$index]">

即使数组的值正在更改,您的checbox状态也将存在。

您正在尝试检查行是否选中或是否忽略数据。在控制器中定义存储行状态的对象,如

$scope.rowState = {};
并更改
复选框
模型,如

<input type="checkbox" ng-model="rowState['index_' + $index]" />

实际上
ng repeat
动态创建
rowState
对象,如
rowState.index\u 0
rowState.index\u 1


选中您可能需要的
ng repeat=“ioStatusData中的数据按数据跟踪。IOStatusName”
(假设IOStatusName唯一标识一个数据)。由于复选框位于ngRepeat内,因此单独在其上设置ngModel将无助于通过ngRepeat更新周期进行更新。因此,在ngModel旁边使用一次性绑定<代码>当列表更改时,建议添加选中值{IOStatusName:xx,checked:true},并绑定到复选框重新选中value@JBNizet你能说得更清楚一点吗?好吧,试试你的建议,你会发现它不起作用:不需要那个丑陋的父母。只需在控制器中初始化数组:这是我不清楚的一件事-ng repeat为数组中的每个项创建作用域,如果不使用$parent,则该项的当前作用域将是迭代器创建的作用域。如果不使用父项,它仍然使用控制器范围中定义的变量,而不是ng repeat中项目的内部范围?ng repeat的范围继承自控制器范围。因此,如果在控制器作用域中初始化
myCheckboxIsChecked
,它将在ng repeat作用域中继承,angular将在那里找到它,并对其进行更新。
<input type="checkbox" ng-model="rowState['index_' + $index]" />