我有一个选定的数组,它将保存所有选定的项目。因此,当您更改复选框时,该项目会从该数组中添加或删除。问题是如果有其他东西改变了选定的数组,复选框不会更新。
将选定状态存储在它自己的项目上不是一个选项,因为在我的应用程序中,项目数组会根据 url 重新填充。所以 selected 数组是一个全局数组,包含您选择的所有项目。为了给它一些上下文,我的应用程序是一个文件浏览器,您可以选择不同目录中的文件。
普朗克
http://plnkr.co/edit/h9t3caBzk7hyTYJysCay?p=preview
js
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.selected = ['one'];
$scope.items = ['one', 'two', 'three'];
$scope.select = function (item, s) {
if (s) {
return $scope.selected.push(item);
}
$scope.selected.splice($scope.selected.indexOf(item.path), 1);
}
});
app.controller('ItemCtrl', function ($scope) {
$scope.s = $scope.selected.some(function (i){
return i === $scope.item;
})
})
html
<body ng-controller="MainCtrl">
<button ng-click='selected.length = 0'>Clear selected</button>
<p ng-repeat='item in items' ng-controller='ItemCtrl'>
<input type='checkbox' ng-change='select(item, s)' ng-model='s' /> {{item}}
</p>
{{selected}}
</body>