在ng-repeat中的表达式中调用的Angularjs函数没有被调用?

时间:2015-09-13 06:21:30

标签: javascript angularjs angularjs-ng-repeat

我是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
        }
        
        
]
    
    
}());
   
   
    

    
    
  
    

    

3 个答案:

答案 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)}}