如何将对象推入angularjs中的数组?

时间:2015-12-23 17:42:00

标签: javascript angularjs

我正在使用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);
      }
    };

任何人都可以帮我这样做..

2 个答案:

答案 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中删除逻辑,并允许代码重用。双赢!

然后,你只需要正常推动对象,你就完成了!