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

angularjs how to push array to add dynamic form fields

嗨,我是 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" 请帮助我真的很紧张,因为我从昨天开始尝试这个。谢谢

改为

    $scope.categories[id].choices

它将纠正您的错误

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

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

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

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