在我的Angular应用程序中,我有一个嵌套ng-repeat
内生成的以下复选框列表:
<div ng-repeat="partner in type.partners">
<label class="checkbox-inline">
<input type="checkbox"
ng-model="partners[$parent.$index][$index]"
ng-true-value="{{partner}}"
ng-change="handleCheckboxChanged({{type.id}})"
ng-checked="getChecked({{partner.id}})"
>
<p><span ></span>{{partner.name}}<p>
</label>
</div>
这将最终看起来如下图所示:
当用户选择包含chekcbox的合作伙伴时,此合作伙伴会添加到所选合作伙伴的嵌套列表中,并使用ng-true-value
和ng-model
。
但是,当用户取消选择一个复选框时,我的对象仍将保留该键:值对,但该值现在只是false
,如控制台中所示:
我的意图是,当用户取消选中复选框时,此键:值对将消失,而不是仅仅变为假。
是否可以通过触发ng-false-value
?
答案 0 :(得分:1)
您所描述的内容 - 这是默认行为。您可以调整ngChange
功能。
只是一个简单的example,你可以如何做到。
<div ng-repeat="partner in partners">
<label>
<input type="checkbox"
value="partner.id"
ng-model="partner.selected"
ng-change="changeValue(partner)"
/>
{{partner.name}}
</label>
</div>
var partnersList = [], idsArray = [];
$scope.changeValue = function(partner){
if(partner.selected)
addPartner(partner);
else
removePartner(partner);
};
var addPartner= function(partner){
if(!existInList(partner))
partnersList.push(partner);
};
var removePartner= function(partner){
idsArray = getIdsArray();
var indexToRemove = idsArray.indexOf(partner.id);
if(indexToRemove == -1)
return;
partnersList.splice(indexToRemove, 1);
};
var existInList = function(partner){
idsArray = getIdsArray();
return idsArray.indexOf(partner.id) != -1;
};
var getIdsArray = function(){
return partnersList.map(function(partner){ return partner.id });
};
链接到JSFiddle示例。