
Bagaimana untuk Mengikat kepada Senarai Nilai Kotak Semak dalam AngularJS?
Pengenalan
Apabila berurusan dengan satu set kotak pilihan , adalah penting untuk mengikat nilai mereka pada senarai dalam pengawal untuk pengurusan yang berkesan. Walau bagaimanapun, sifat ng-model AngularJS nampaknya terhad kepada mengikat satu nilai kotak semak. Artikel ini meneroka dua pendekatan untuk menyelesaikan isu ini, memanfaatkan sama ada tatasusunan ringkas atau tatasusunan objek sebagai data input.
Pendekatan 1: Tatasusunan Mudah
HTML:
1 2 3 4 5 6 7 8 9 | <label ng-repeat= "fruitName in fruits" >
<input
type= "checkbox"
name= "selectedFruits[]"
value= "{{fruitName}}"
ng-checked= "selection.indexOf(fruitName) > -1"
ng-click= "toggleSelection(fruitName)"
> {{fruitName}}
</label>
|
Salin selepas log masuk
Pengawal:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | app.controller( 'SimpleArrayCtrl' , [ '$scope' , function SimpleArrayCtrl( $scope ) {
$scope .fruits = [ 'apple' , 'orange' , 'pear' , 'naartjie' ];
$scope .selection = [ 'apple' , 'pear' ];
$scope .toggleSelection = function toggleSelection(fruitName) {
var idx = $scope .selection.indexOf(fruitName);
if (idx > -1) {
$scope .selection.splice(idx, 1);
} else {
$scope .selection.push(fruitName);
}
};
}]);
|
Salin selepas log masuk
Kebaikan:
- Data ringkas struktur
- Togol mudah mengikut nama
Keburukan:
- Operasi tambah/buang yang menyusahkan
Pendekatan 2: Tatasusunan Objek
HTML:
1 2 3 4 5 6 7 8 | <label ng-repeat= "fruit in fruits" >
<input
type= "checkbox"
name= "selectedFruits[]"
value= "{{fruit.name}}"
ng-model= "fruit.selected"
> {{fruit.name}}
</label>
|
Salin selepas log masuk
Pengawal:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | app.controller( 'ObjectArrayCtrl' , [ '$scope' , 'filterFilter' , function ObjectArrayCtrl( $scope , filterFilter) {
$scope .fruits = [
{ name: 'apple' , selected: true },
{ name: 'orange' , selected: false },
{ name: 'pear' , selected: true },
{ name: 'naartjie' , selected: false }
];
$scope .selection = [];
$scope .selectedFruits = function selectedFruits() {
return filterFilter( $scope .fruits, { selected: true });
};
$scope . $watch ( 'fruits|filter:{selected:true}' , function (nv) {
$scope .selection = nv.map( function (fruit) {
return fruit.name;
});
}, true);
}]);
|
Salin selepas log masuk
Kebaikan:
- Operasi tambah/buang yang mudah
Keburukan:
- Struktur data yang lebih kompleks
- Togol mengikut nama yang menyusahkan
Demo: http://jsbin.com/ImAqUC/1/
Atas ialah kandungan terperinci Bagaimana untuk Mengikat Berbilang Nilai Kotak Semak ke Senarai dalam AngularJS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!