Angular:具有ng-false-value

时间:2015-09-29 08:02:34

标签: javascript angularjs

在我的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>

这将最终看起来如下图所示:

enter image description here

当用户选择包含chekcbox的合作伙伴时,此合作伙伴会添加到所选合作伙伴的嵌套列表中,并使用ng-true-valueng-model

但是,当用户取消选择一个复选框时,我的对象仍将保留该键:值对,但该值现在只是false,如控制台中所示:

enter image description here

我的意图是,当用户取消选中复选框时,此键:值对将消失,而不是仅仅变为假。

是否可以通过触发ng-false-value

的功能来实现

1 个答案:

答案 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示例。