問題:
在AngularJS 中,呈現一個複選框列表,並且目標是在它們和控制器中的列表之間建立綁定。每個選取的複選框都表示清單中包含其關聯值。
解決方案:
AngularJS 針對此問題提供了兩種可行的解決方案:
< ;h3>1。簡單陣列作為輸入資料
在這種方法中,HTML 結構模仿複選框清單:
<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>
隨附的控制器程式碼處理互動:
app.controller('SimpleArrayCtrl', ['$scope', function SimpleArrayCtrl($scope) { // Fruits $scope.fruits = ['apple', 'orange', 'pear', 'naartjie']; // Selected fruits $scope.selection = ['apple', 'pear']; // Toggle selection for a given fruit by name $scope.toggleSelection = function toggleSelection(fruitName) { var idx = $scope.selection.indexOf(fruitName); if (idx > -1) { $scope.selection.splice(idx, 1); } else { $scope.selection.push(fruitName); } }; }]);
使用物件陣列作為輸入資料會增加額外的複雜性,但會簡化插入和刪除操作:
<label ng-repeat="fruit in fruits"> <input type="checkbox" name="selectedFruits[]" value="{{fruit.name}}" ng-model="fruit.selected" > {{fruit.name}} </label>
控制器代碼反映了更改:
app.controller('ObjectArrayCtrl', ['$scope', 'filterFilter', function ObjectArrayCtrl($scope, filterFilter) { // Fruits $scope.fruits = [ { name: 'apple', selected: true }, { name: 'orange', selected: false }, { name: 'pear', selected: true }, { name: 'naartjie', selected: false } ]; // Selected fruits $scope.selection = []; // Helper method to get selected fruits $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); }]);
優點與缺點:
簡單陣列:
簡單數組資料結構
更複雜的資料結構按名稱切換需要輔助方法但是,插入和刪除非常簡單演示:演示: http://jsbin.com/ImAqUC/1/
以上是如何將 AngularJS 複選框綁定到值列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!