Angular:ng 模型数组值在 ng-click 的函数中未定义

Angular : ng model array values got undefined in function on ng-click

我试图让用户在文本框中添加数量。我有产品数组,每个产品都包含其 属性。我的服务包含数组列表。

products = [{
   id: 1,
   name: 'X Product',
   face: 'img/x_p.png',
   available_size: 6,
   color_available: 0,
   sizes: ['10"', '20"', '30"'],
   properties: [{size: '10"', mrp: '10$'},
              {size: '20"', mrp: '15$'},
              {size: '30"', mrp: '20$'}]
 },
 {
   id: 2,
   name: 'Y Product',
   face: 'img/y_p.png',
   available_size: 6,
   color_available: 0,
   sizes: ['10"', '20"', '30"'],
   properties: [{size: '10"', mrp: '10$'},
              {size: '20"', mrp: '15$'},
              {size: '30"', mrp: '20$'}]
}]

遍历产品数组。当用户点击产品时,它会显示一个产品展示页面。我在这里展示产品的所有信息。对于属性,我显示 table 用户可以在每个尺寸后添加他们的数量。

<div style="margin-bottom: 20px;">
  <h4>
    Product Detail
  </h4>
  <table>
    <tbody>
      <tr class="tableHeader">
        <td>Size</td>
        <td>MRP</td>
        <td>Quantity</td>
      </tr>
      <tr ng-repeat="(key, property) in product.properties">
        <td>{{  property['size']  }}</td>
        <td>{{  property['mrp']  }}</td>
        <td>
          <input type="number" placeholder="QTY" ng-model="qty">
        </td>
        <td>
          <a href="javascript:;" class="button" ng-click="addToCart(property['size'], qty)">
        Add
          </a>
        </td>
      </tr>
    </tbody>
  </table>
</div>

问题:所以根据这个table每一行包含一个名称为add的按钮。因此,在添加数量后,用户点击添加按钮将允许他们在购物车中添加商品。在这里,我在 addToCart 函数中获取大小,但得到未定义的数量,因为它应该是一个具有各自大小的数组。虽然我越来越大了。但我不知道该怎么做。

$scope.addToCart = function(size, qty) {
  alert($scope.qty)
}

我需要帮助。

var app = angular.module("MyApp", []);

app.controller("MyCtrl", function() {
  this.addToCart = function(property, qty) {
    property["qty"] = qty;
  }
  this.product = {
    id: 1,
    name: 'X Product',
    face: 'img/x_p.png',
    available_size: 6,
    color_available: 0,
    sizes: ['10"', '20"', '30"'],
    properties: [{
      size: '10"',
      mrp: '10$'
    }, {
      size: '20"',
      mrp: '15$'
    }, {
      size: '30"',
      mrp: '20$'
    }]
  };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div style="margin-bottom: 20px;" ng-app="MyApp">
  <div ng-controller="MyCtrl as ctrl">
    <h4>
    Product Detail
  </h4>
    <table>
      <tbody>
        <tr class="tableHeader">
          <td>Size</td>
          <td>MRP</td>
          <td>Quantity</td>
        </tr>
        <tr ng-repeat="(key, property) in ctrl.product.properties">
          <td>{{ property['size'] }}</td>
          <td>{{ property['mrp'] }}</td>
          <td>
            <input type="number" placeholder="QTY" ng-model="qty">
          </td>
          <td>
            <a href="javascript:;" class="button" ng-click="ctrl.addToCart(property, qty)">
        Add
          </a>
          </td>
        </tr>
      </tbody>
    </table>
    <hr/>
    {{ctrl.product.properties}}
  </div>
</div>

我多次注意到文本框不会绑定到像

这样的普通范围变量

$scope.qty 并将其绑定到视图中 ng-model="qty"

请尝试使用

$scope.qty = { 文本:' ' }

并在视图中将其绑定为 ng-model="qty.text"

这将确保您的文本框确实已绑定。

解决此问题的简单方法:按 $scope.qty = 0;

初始化数量