如何将复选框值添加到 AngularJS 中的数组?
How to add checkbox values to an array in AngularJS?
请有人帮助我!
假设我有一个复选框列表,每个复选框都有一个 ID。
我想 $scope 一个带有选中复选框 ID 的数组。
<div ng-app="myapp">
<div ng-controller="ctrlParent">
<table>
<tr ng-repeat="(key, value) in providers">
<td><input type="checkbox" ng-model="ids[value.Id]"> {{value}} </td>
</tr>
</table>
{{ids}}
</div>
还有我的控制器:
var app = angular.module('myapp',[]);
app.controller('ctrlParent',function($scope){
$scope.providers = [{Id:5},{Id:6},{Id:8},{Id:10}];
$scope.ids = {};
});
现在我的数组输出(如果选中所有复选框)是:{"5":true,"6":true,"8":true,"10":true}
我想要:[{Id:5},{Id:6},{Id:8},{Id:10}]
这是一个可能的解决方案:
<input type="checkbox" ng-model="ids[$index]" ng-true-value="
{{value}}" ng-false-value="{{undefined}}"/>{{value}}
这样,你将得到一个对象数组,因为你正在分配ids[$index] = value
。
但是有一个缺点:当您双击复选框时,数组中将有一个空元素。
var app = angular.module('myapp', []);
app.controller('ctrlParent', function($scope) {
$scope.providers = [{
Id: 5
}, {
Id: 6
}, {
Id: 8
}, {
Id: 10
}];
$scope.ids = [];
$scope.$watchCollection('ids', function(newVal) {
for (var i = 0; i < newVal.length; ++i) {
console.log(newVal[i]);
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myapp">
<div ng-controller="ctrlParent">
<table>
<tr ng-repeat="(key,value) in providers">
<td>
<input type="checkbox" ng-model="ids[$index]" ng-true-value="{{value}}" ng-false-value="{{undefined}}" />{{value}}
</td>
</tr>
</table>{{ids}}</div>
</div>
<input type="checkbox" ng-model="ids[$index]" ng-true-value="{{value}}" >
添加 ng-true-value 指令将解决问题
并在控制器中将 id 从对象更改为数组
请有人帮助我! 假设我有一个复选框列表,每个复选框都有一个 ID。 我想 $scope 一个带有选中复选框 ID 的数组。
<div ng-app="myapp">
<div ng-controller="ctrlParent">
<table>
<tr ng-repeat="(key, value) in providers">
<td><input type="checkbox" ng-model="ids[value.Id]"> {{value}} </td>
</tr>
</table>
{{ids}}
</div>
还有我的控制器:
var app = angular.module('myapp',[]);
app.controller('ctrlParent',function($scope){
$scope.providers = [{Id:5},{Id:6},{Id:8},{Id:10}];
$scope.ids = {};
});
现在我的数组输出(如果选中所有复选框)是:{"5":true,"6":true,"8":true,"10":true}
我想要:[{Id:5},{Id:6},{Id:8},{Id:10}]
这是一个可能的解决方案:
<input type="checkbox" ng-model="ids[$index]" ng-true-value="
{{value}}" ng-false-value="{{undefined}}"/>{{value}}
这样,你将得到一个对象数组,因为你正在分配ids[$index] = value
。
但是有一个缺点:当您双击复选框时,数组中将有一个空元素。
var app = angular.module('myapp', []);
app.controller('ctrlParent', function($scope) {
$scope.providers = [{
Id: 5
}, {
Id: 6
}, {
Id: 8
}, {
Id: 10
}];
$scope.ids = [];
$scope.$watchCollection('ids', function(newVal) {
for (var i = 0; i < newVal.length; ++i) {
console.log(newVal[i]);
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myapp">
<div ng-controller="ctrlParent">
<table>
<tr ng-repeat="(key,value) in providers">
<td>
<input type="checkbox" ng-model="ids[$index]" ng-true-value="{{value}}" ng-false-value="{{undefined}}" />{{value}}
</td>
</tr>
</table>{{ids}}</div>
</div>
<input type="checkbox" ng-model="ids[$index]" ng-true-value="{{value}}" >
添加 ng-true-value 指令将解决问题 并在控制器中将 id 从对象更改为数组