我正在尝试使用checkboxes
中的AngularJS
创建一个包含多个选项的菜单。
我已经为我的DB
建模了我想在逻辑中使用的2个属性;
min_selection_points
和max_selection_points
。我的想法是,我将使用它们来跟踪我的checkboxes
已被选中的数量,一旦达到max_selection_points
,我将停用checkboxes
的其余部分。
假设我有6个checkboxes
和max_selection_points = 2
,当选中2个复选框时,如果取消选择1,则禁用剩余的4个checkboxes
,然后重新启用它们,因为选择次数未达到2,即最大值。我打算在按下min_selection_points
时使用button
作为验证,因此我希望能够计算已选中复选框的数量,或者在达到bool
时设置max_selection_points
......到目前为止,这是我的代码;
<div class="group-items" ng-if="modifier.max_selection_points > 1 || (modifier.max_selection_points == 1 && modifier.min_selection_points == 0)">
<div ng-repeat="item in modifier.menu_modifier_items" class="modifier-item multiple">
<label for="<%modifier.id + '_' + item.id%>">
<input id="<%modifier.id + '_' + item.id%>"
class="checkbox-branded"
type="checkbox"
name="<%item.name%>"
ng-model="item.selected"
ng-class="{'not-available': !item.available}"
title="<%item.name%>"
value="<%item.id%>">
<span class="item-name">
<span ng-bind="item.name"></span>
<span ng-bind="priceDelta(modifier, item)"></span>
</span>
</label>
</div>
</div>
我相信我需要使用ng-click
和ng-change
来实现这个逻辑,所以我有:
ng-click="modifierClicked(item)"
ng-change="modifierSelected(item)"
任何指导意见
答案 0 :(得分:0)
您可以使用一个函数返回已选中复选框的数量:
$scope.Checked = function() {
var count = 0;
angular.forEach($scope.modifier.menu_modifier_items, function(item){
count += item.selected ? 1 : 0;
});
return count;
}
然后你可以在每个输入上禁用ng:
ng-disabled="!item.selected && Checked== modifier.max_selection_points"
您可以尝试此plunker
答案 1 :(得分:0)
以前的答案提议卢卡斯罗德里格斯是对的,但是那个掠夺者很奇怪。
$scope.max_selection_points = 2;
$scope.questions = [{
id: 21,
answer: "Chicago"
}, {
id: 22,
answer: "New York"
}, {
id: 23,
answer: "Los Angeles"
}, {
id: 24,
answer: "London"
}, {
id: 25,
answer: "Moskva"
}];
$scope.countChecked = function() {
var count_ = 0;
angular.forEach($scope.questions, function(quest) {
if (quest.checked)
count_++;
});
return count_;
}
<div ng-repeat="question in questions">
<label>
<input ng-disabled="!question.checked && max_selection_points==countChecked()" type="checkbox" ng-model="question.checked">{{ question.answer }}
<br/>
</label>
</div>
这是正确的plunker。