2015-12-21 40 views
2

我正在使用離子框架和angularjs爲一個應用程序。我正在使用ng-repeat內的複選框。問題是,如果我選中複選框,它將被添加到數組中。如果我取消選中它不會從該陣列中刪除。如何在angularjs的ng-repeat中正確使用checkbox?

的HTML代碼是

<div class="action-checkbox" ng-repeat="task in alltasks"> 
    <h3>{{task.taskName}}</h3> 
    <ul> 
    <li ng-repeat="subtask in task.subTasks" ng-click="addList(task,subtask)"> 
     <input id="{{task._id}}_{{subtask._id}}" name="{{task._id}}_{{subtask._id}}" type="checkbox" value="{{subtask.subTaskName}}" ng-checked="subtask.checked" ng-model="slectedTasks" class="hide"/> 
     <label for="{{task._id}}_{{subtask._id}}" > 
     {{subtask.subTaskName}} 
     </label> 
    </li> 
    </ul> 
</div> 

我的控制器代碼是

$scope.addList = function(task,subtask){ 
     subtask.checked= !(subtask.checked); 
     var data = { 
     "task_id": task._id, 
     "subTaskName": subtask.subTaskName, 
    };  
     if(subtask.checked){ 
     selectedMap.push(data); 
     } 
    } 

誰能幫助我解決這個..

+0

你把你的刪除代碼放在哪裏? –

+0

這就是我想要做的Anik。如果我給selectedMap.remove(data),整個數組將被刪除 –

回答

0

最後我得到了這個答案。如果我使用「selectedMap [i] === data」,我無法拼接數組,因爲它無法正確比較對象。 代碼是

if(subtask.checked){ 
     //selectedMap[task._id,subtask.subTaskName] = data; 
    selectedMap.push(data); 
    duparray = selectedMap; 
    console.log(selectedMap); 
    } 
    if(!subtask.checked){ 
     console.log("not checked"); 
     var sellength = selectedMap.length; 
     duparray = selectedMap; 
     //console.log(duparray); 
      for(var i = sellength - 1; i >= 0; i--) { 
        if(selectedMap[i].subTaskName == data.subTaskName) { 
         console.log(duparray); 
         duparray.splice(i, 1); 
         console.log(duparray); 
         } 
        } 
      } 
1

添加代碼,同時移除元素。

if(subtask.checked == false){ 
      for(var i = selectedMap.length - 1; i >= 0; i--) { 
        if(selectedMap[i] === data) { 
         selectedMap.splice(i, 1); 
         } 
        } 
      }