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

时间:2016-07-15 06:39:05

标签: angularjs ionic-framework angularjs-ng-repeat angularjs-ng-model ng-bind

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

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$'}]
}]

迭代产品数组。当用户点击产品时,它将显示产品展示页面。我在哪里显示产品的所有信息。对于属性,我显示的是一个表,用户可以在每个大小之后添加数量。

<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>

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

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

我需要帮助。

3 个答案:

答案 0 :(得分:1)

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>

答案 1 :(得分:0)

我多次注意到文本框不会绑定到正常的范围变量,如

$ scope.qty  并使用ng-model =“qty”

将其绑定在视图中

请尝试使用类似

的内容

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

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

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

答案 2 :(得分:0)

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

初始化