在ng-repeat中调用函数?

时间:2016-06-27 05:18:40

标签: javascript angularjs

如果我有一些与此类似的代码,我将如何调用getUserName()内的ng-repeat函数。我试图提前做它并且它起作用,然而,它不再起作用。

 var user_reviews = [{
     user: {
         name: "John Doe"
     },
     review: {
         item: "Shure SE215"
     }
 }]

 var app = angular.module("ExApp", []);
 app.controller("TestController", function($scope) {
     $scope.reviews = user_reviews;
     $scope.getUserName = function() {
         return $scope.user.name;
     }
 });

HTML

<div ng-controller="TestController">
  <div ng-repeat="review in reviews">
    <p>{{review.getUserName()}}</p>
  </div>
</div> 

4 个答案:

答案 0 :(得分:4)

您可以从ng-repeat传递索引并返回与该索引相关的user.name

  <div ng-controller="TestController">
      <div ng-repeat="review in reviews">
        <p>{{getUserName($index)}}</p>
      </div>
    </div> 

  var app = angular.module("ExApp", []); 
    app.controller("TestController", function($scope){
      $scope.reviews = user_reviews; 
      $scope.getUserName = function(index){
        return $scope.reviews[index].user.name; 
      }
    });

但如果你正在使用这个senario的功能,我更喜欢没有像这样的功能

<div ng-controller="TestController">
          <div ng-repeat="review in reviews">
            <p>{{review.user.name}}</p>
          </div>
        </div> 

答案 1 :(得分:1)

//You can directly access the username 
    <div ng-controller="TestController">
      <div ng-repeat="review in reviews">
        <p>{{review.user.name}}</p>
      </div>
    </div> 

//or You can pass the review as parameter and return username from that function.
    //HTML
    <div ng-controller="TestController">
      <div ng-repeat="review in reviews">
        <p>{{getUserName(review)}}</p>
      </div>
    </div> 
    //JS
    $scope.getUserName = function(review){
        return review.user.name; 
    }

答案 2 :(得分:1)

假设scope.getUserName()不像示例中那样简单,您可以改为执行此操作。

    // Pass the `review` object as argument
    $scope.getUserName = function(review){
        return review.user.name; // get the user name from it
    }

HTML,将review作为参数传递

<div ng-controller="TestController">
  <div ng-repeat="review in reviews">
    <p>{{getUserName(review)}}</p>
  </div>
</div> 

答案 3 :(得分:0)

您应该将代码更改为此。

<div ng-controller="TestController"><div ng-repeat="review in reviews">
<p ng-repeat="userName in review.getUserName(review.name)">{{userName.name}}</p></div></div>

var user_reviews = [
  {
    user:{
      name: "John Doe"
    }, 
    review:{
      item: "Shure SE215"
    } 
  } 
]

var app = angular.module("ExApp", []); 
app.controller("TestController", function($scope){
  $scope.reviews = user_reviews; 
  $scope.getUserName = function(userName){
    return $scope.user.name; 
  }
});