angularjs如何推送数组来添加动态表单字段

时间:2016-09-02 11:31:47

标签: angularjs nested dynamic-forms

您好我是Angularjs的新手请帮助我尝试创建一个动态表单字段我的HTML就是这样

<div ng-repeat="cb in categories">
  <div ng-repeat="choice in cb.choices">
    <input type="text" ng-model="choice.req_goods">
    <input type="text" ng-model="choice.qty">
    <button ng-hide="$first" ng-click="removeChoice($parent.$index,$index)">-</button>
  </div>
  <button type="button" ng-click="addNewChoice($index)">+</button>
</div>

JS

$scope.categories = [
{
  "id":1,
   "name":"Furniture & Fixture",
   "choices":[
   {
      "req_goods":"table",
       "qty":"4"
    }]
 },
 {
   "id":2,
   "name":"Miscellaneous Property",
   "choices":[
   {
      "req_goods":"others",
      "qty":"6"
   }]
}];

$scope.addNewChoice = function(id){
            $scope.categories.choices[id].push({});
};

我想在用户点击添加按钮时动态添加选项。我尝试了上面的addNewChoice()函数,但它给出了错误angular.min.js:114 TypeError: Cannot read property '0' of undefined"请帮助我非常紧张,因为我从昨天开始尝试这个。谢谢

2 个答案:

答案 0 :(得分:2)

将其更改为

    $scope.categories[id].choices

它会纠正您的错误

答案 1 :(得分:1)

正如@Ranjith J所说,您必须将代码更改为

$scope.categories[id].choices.push({})

当您将$index作为ng-click="addNewChoice($index)"中的参数传递时,您指的是类别索引。因此,使用id参数访问正确的类别是有意义的。

有关工作示例,请参阅this JSFiddle