2016-09-23 30 views
0

我创建了一个包含一些文本框,单选按钮和复选框的页面。我正在使用此页面来保存新数据或编辑现有数据。我可以保存新数据,但为了编辑数据,页面应该显示一些预定义的值,这些值是从变量中获取的。我能够从该变量中获取和设置文本框和单选按钮的值。但我无法检查复选框。我有很多复选框,所以我正在使用ng-repeat将值显示在页面上。我将所选复选框的值设置为数组并将该值传递给我的服务层。从AngularJS的数组值中选择复选框

下面是我的代码片段:

HTML:

<div id="activityCheckboxList" class="checkboxList"> 
    <div ng-repeat="activity in activities"> 
     <label> 
       <input type="checkbox" ng-true-value="activity" ng-checked="selection.indexOf(activity) > -1" ng-click="toggleSelection(activity)"/> 
       <span>{{activity.activityName}}</span> 
      </label> 
    </div> 
</div> 

app.js:

$scope.selection=[]; 
$scope.getActivities(); //this sets values in $scope.activities which is a  list coming from service layer 

    //Get Selected Activities from Check Boxes 
    $scope.toggleSelection = function toggleSelection(activity){ 
     var idx = $scope.selection.indexOf(activity); 

     if(idx > -1){ 
      $scope.selection.splice(idx, 1); 
     } 
     else{ 
      $scope.selection.push(activity); 
     } 
    }; 

在此之后,当点击提交,我传递$ scope.selection这将包含我的活动对象。

对于编辑数据,我可以把数据放在选择[]中。但如何检查使用该复选框,并在该用户之后,应该取消/检查他们再次。我尝试使用foreach循环,但它没有帮助。

在此先感谢

回答

0

为“活动”是一个对象,是的indexOf没有找到索引正道。我做了一些改动你的代码

HTML

   <input type="checkbox" ng-true-value="activity" 
     ng-checked="checkInSelectionList(activity)" ng-click="toggleSelection(activity)"/> 
       <span>{{activity.activityName}}</span> 

JS

$scope.checkInSelectionList = function (item) { 
for(var i=0; i<$scope.selection.length;i++){ 
    if($scope.selection[i]['ID'] == item['ID']){ 
    return true; 
    } 
} 
} 

您还可以使用underscore找到一个对象的索引。

https://jsfiddle.net/nors536b/

+0

非常感谢!你真的帮助节省了很多时间。 :) – blu3