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;
初始化数量
我试图让用户在文本框中添加数量。我有产品数组,每个产品都包含其 属性。我的服务包含数组列表。
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;
初始化数量