簡體   English   中英

使用Angular選中和取消選中復選框

[英]Check and uncheck checkbox with Angular

在我的表單中,所有這些列中都有一個帶有復選框的表。 我有3個<tr> ,每個<tr>都有其ng-repeate調用Web服務以顯示克隆(Json數據)。 當我單擊一個復選框時,我生成一個js數組,該數組使用以下代碼記錄id:

checkoptions (array, model) {
angular.forEach(array, (value, key) => {
  if (array[key].checked) {
    model.push(array[key].id)
  }
})

在HTML中:

<tr ng-repeat="developer in $ctrl.developers">
    <td>{{developer.label}}</td>
    <td>
      <input type="checkbox" id="{{developer.id}}"
          ng-change="$ctrl.checkoptions($ctrl.developers,$ctrl.employees.developers)" 
             ng-model="developer.checked">
                <label for="{{developer.id}}"></label>
     </td>

它有效,但是問題是當我取消選中復選框時,它不會從js數組中刪除

我包括要從陣列中刪除的其他部分: http : //jsfiddle.net/x9m1nqvp/1/

      $scope.checkoptions = function (array, model) {
        angular.forEach(array, (value, key) => {
          if (array[key].checked) {
            var index = model.indexOf(array[key].id);
            if(index == -1)
                model.push(array[key].id)
          }
          else {
            var index = model.indexOf(array[key].id);
            if(index >=0)
                model.splice(index, 1);
          }
      })

雖然埃弗頓的答案可以完成工作,但是每次單個復選框更改狀態時,檢查陣列中的每個項目都是多余的。 您實際上不必為數組中的每個項目都進行更新。

這是一個示例,其中僅將實際切換的復選框添加到employees.developers數組中或從其中刪除( 注意:不需要多余的angular.forEach ):

$scope.checkoption = function (developer){
    if (developer.checked) {
        var index = $scope.employees.developers.indexOf(developer.id);
        if(index == -1)
            $scope.employees.developers.push(developer.id)
    } else {
        var index = $scope.employees.developers.indexOf(developer.id);
        if(index >=0)
            $scope.employees.developers.splice(index, 1);
    }
}

以及如何在html中使用它:

<tr ng-repeat="developer in developers">
    <td>{{developer.label}}</td>
    <td>
        <input type="checkbox" id="{{developer.id}}"
            ng-change="checkoption(developer)" 
            ng-model="developer.checked">
        <label for="{{developer.id}}"></label>
    </td>
</tr>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM