AngularJS - 如何将键值对推入数组?

时间:2014-08-25 20:04:04

标签: javascript arrays angularjs

我试图使用AngularJS将一个关键:值对推入一个新对象,并且似乎遇到了一些麻烦。

这是html:

<div class="small-12  medium-6 large-6 columns">

  <div id="addSubTarget">   
    <p>Add Targets</p>
    <input type="text" ng-model="sublevel.tagName">
    <button type="button" class="resultsButton" ng-click="addTag()">Submit</button>
  </div>

  <div id="addSubTargetBox">
    <p>Targets Added</p>
    <div id="targetAddedBox">
      <div class="targetAddedInBox" ng-repeat="tag in tagsFeed track by $index">
        {{tag}}
        <i class="fa fa-trash-o" title="Delete this tag" ng-click="deleteTag($index)"></i>
      </div>
    </div>                      
  </div>

</div>

<div class="small-12  medium-6 large-6 columns">    

  <div class="sublevelAddTextArea">
    <p>Instructions</p>
    <textarea rows="4" ng-model="sublevel.instructions"></textarea>
  </div>

  <div class="sublevelAddTextArea">
    <p>Response</p>
    <textarea rows="4" ng-model="sublevel.response"></textarea>
  </div>

</div>

按钮在这里:

<button type="button" class="resultsButton" ng-click="submitNewSub()">Submit</button>

这是控制器中的功能:

$scope.submitNewSub = function(){

  var arrayForUse = [];

  arrayForUse.push({
    tag: $scope.tagsFeed,
    instructions: $scope.sublevel.instructions,
    response:$scope.sublevel.response
  });

  console.log(arrayForUse);

  $scope.listTable.push(arrayForUse);

}

我正在使用硬编码数组进行测试,如下所示:

$scope.listTable = [{
  tag: "tags 1",
  instructions: "instructions 1",
  response: "response 1"
},
{
  tag: "tags 2",
  instructions: "instructions 2",
  response: "response 2"
}];

我基本上需要那些输入才能在该结构中推送到该数组,因此角度双向数据绑定将更新我的前端,但似乎某些东西对我不起作用。

2 个答案:

答案 0 :(得分:1)

上面的代码是将数组推送到数组:

var arrayForUse = [];
arrayForUse.push({tag:$scope.tagsFeed, instructions:$scope.sublevel.instructions, response:$scope.sublevel.response});

$scope.listTable.push(arrayForUse);
这是你想要的吗?上面的硬编码测试数组似乎表明你只需要一个数组。

答案 1 :(得分:1)

我想你想逐个推送arrayForUse数组中的每个元素,而不是一次推送整个数组。因此,您需要更改$scope.listTable.push(arrayForUse)

Array.prototype.push.apply($scope.listTable, arrayForUse);

arrayForUse中的每个元素作为单个调用传递给push方法(相当于:$scope.listTable.push(arrayForUse[0], arrayForUse[1], arrayForUse[2], ...);