我是angularJS的新手,我正在尝试一个例子来涵盖基本的概念。 这是一个简单的购物车示例...我试图在评级表达式中调用一个函数来返回所有评级的平均值。但是这些函数没有被调用。那么为什么函数没有被调用&是实现这种功能的正确方法。
<div ng-controller="productsController">
<table class="table table-bordered">
<thead>
<tr>
<th>ProductName</th>
<th>Price</th>
<th>Buy</th>
<th>Total Sold</th>
<th>Rating</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="product in products">
<td>{{product.name}}</td>
<td>{{product.price | currency}}</td>
<td><input type="button" class="btn btn-success" value="Buy"/></td>
<td>{{product.totalSold}}</td>
<td>{{product.getRating(product)}}</td>
</tr>
</tbody>
</table>
</div>
这是js部分
(function(){
var productsModule=angular.module("productsModule",[]);
productsModule.controller("productsController",["$scope",function($scope){
$scope.products=productsObj;
$scope.getRating=function(){
var _rating=0;
for(var i=0;i<product.ratings.length;i++)
_rating+=product.ratings[i];
return _rating || "Not Rated";
};
}]);
/* products object*/
var productsObj=[
{
name:"Santoor",
price:12,
isAvilable:true,
images:[],
ratings:[2.5,3,3.5,3.8],
totalSold:0
}
]
}());
答案 0 :(得分:2)
您没有以正确的方式调用控制器功能。它应该是
<td>{{getRating(product)}}</td>
代替
<td>{{product.getRating(product)}}</td>
另外,您将参数传递给控制器功能,并且您没有在函数中声明参数。你的功能应该是
$scope.getRating=function(product){
var _rating=0;
for(var i=0;i<product.ratings.length;i++)
_rating+=product.ratings[i];
return _rating || "Not Rated";
};
答案 1 :(得分:1)
你必须使用
for(var i=0;i<$scope.products.ratings.length;i++)
_rating+=$scope.products.ratings[i];
因为产品是范围变量。
也
{{product.getRating(product)}}
到
{{getRating(product)}}
答案 2 :(得分:1)
变化
{{product.getRating(product)}}
到
{{getRating(product)}}