0

我正在使用AngularJs ui bootstrap模式。我有一個複選框的頁面。當複選框用戶檢查並點擊一個按鈕,它把選中的複選框的模式:Angularjs UI Bootstrap模式 - 複選框選中狀態不更新

var modalInstance = $modal.open({ 
    templateUrl: 'myModalContent.html', 
    controller: ModalInstanceCtrl, 
    resolve: { 
    checkedSearches: function() { 
     var checkedSearches = []; 
     angular.forEach($scope.searches, function(search) 
      { 
       if(search.checked) { 
        checkedSearches.push(search); 
       } 
      }); 

      return checkedSearches; 
     } 
    } 
}); 

在我的模式,我們又重新顯示數據爲複選框。用戶可以選擇/取消選擇複選框並點擊保存,它將保存所有選中的複選框。

var ModalInstanceCtrl = function ($scope, $modalInstance, checkedSearches) { 
    $scope.checkedSearches = checkedSearches; 

    var saveSearches = []; 
    angular.forEach($scope.checkSearches, function(search) 
       { 
        if(search.checked) { 
         saveSearches.push(search); 
        } 
       }); 

} 

問題是,它是保存所有的複選框。似乎選中的屬性保留在複選框中,即使用戶取消選中模式。我沒有包含保存搜索的代碼。我基本上推到searchSearches陣列,它似乎推動所有複選框,包括未選中的複選框。

下面是複選框我的看法/莫代爾:

<tr ng-repeat="search in checkedSearches"> 
    <td><input type="checkbox" ng-checked="search.checked" name="search" ng-model="search.checked" /></td><td>{{search.id}}</td><td>{{search.name}}</td> 
</tr> 

回答

0

好吧,貌似問題是,由於某種原因,該複選框選中的財產,沒有被綁定模型。所以我增加了一個NG-點擊指令來處理這個問題:

<tr ng-repeat="search in checkedSearches"> 
    <td> 
     <input type="checkbox" name="search" ng-checked="search.checked" ng-click="setCheckbox(search)" /> 
    </td> 
</tr> 

我說這在我的模態的控制:

$scope.setCheckbox = function(search) { 
    if(search.checked == true) { 
     search.checked = false; 
    } 
    else { 
     search.checked = true; 
    } 
}; 

現在,如果有人在那裏,能告訴我爲什麼複選框沒有被綁定到我的模型。

+0

使用ng-model(和ng-change如果您需要處理事件)可以解決此問題: http://stackoverflow.com/a/16601110 – user2173353