我正在使用Ionic Framework和angularjs来开发一个应用程序。在这里我使用ng-repeat内的复选框。使用此我可以将复选框选中的值插入到数组中。但它插入的是字符串。
喜欢["编码","测试"]。
但我希望它像对象一样。
喜欢[" object"," object"]。在那个对象里面的值应该在那里。
Html代码
<div class="action-checkbox" ng-repeat="task in projecttasks">
<h3>{{task.projectName}}</h3>
<ul>
<li ng-repeat="subtask in task.subTasks" ng-click="addprjtaskList(task,subtask)">
<input id="{{subtask._id}}" name="{{subtask._id}}" type="checkbox" value="{{subtask.subTaskName}}" ng-checked="selection.indexOf(subtask.subTaskName) > -1" ng-click="toggleSelection(subtask.subTaskName)" class="hide"/>
<label for="{{subtask._id}}" >
{{subtask.subTaskName}}
</label>
</li>
</ul>
</div>
控制器代码是
$scope.selection = [];
// toggle selection for a given fruit by name
$scope.toggleSelection = function toggleSelection(fruitName) {
var idx = $scope.selection.indexOf(fruitName);
// is currently selected
if (idx > -1) {
$scope.selection.splice(idx, 1);
console.log($scope.selection);
}
// is newly selected
else {
$scope.selection.push(fruitName);
console.log($scope.selection);
}
};
任何人都可以帮我这样做..
答案 0 :(得分:4)
toggleSelection(fruitName)
中的你正在传递一个字符串
然后你正在做
$scope.selection.push(fruitName)
正在按照它所说的去做!
您需要将对象传递给函数...
ng-click="toggleSelection(subtask.subTaskName)"
应该......
ng-click="toggleSelection(subtask)"
然后......
改为推动它!
答案 1 :(得分:2)
我认为您正在寻找的是将subtask
推送到数组中,而不是subtask.subTaskName
。
您必须将视图更改为ng-click="toggleSelection(subtask)"
才能引用该对象而不是该对象的名称。
您还必须修改ng-checked="selection.indexOf(subtask.subTaskName) > -1
以引用检查双重性的新函数(因为indexOf()
不喜欢对象数组)。我接下来会进一步讨论。
接下来,您必须更新控制器以测试重复项。我建议使用for循环来创建一个单独的方法来遍历数组,检查subTaskName
是否相等而不是indexOf()
。通过创建一个单独的方法,您可以从html中删除逻辑,并允许代码重用。双赢!
然后,你只需要正常推动对象,你就完成了!