如何在ng-repeat下调用函数?

时间:2017-06-20 06:48:41

标签: angularjs angularjs-scope angularjs-ng-repeat

我正在为我的项目使用angularjs 1和node js。

这里我使用ng-repeat显示产品。每个产品我都可以选择在社交网络中分享。我需要获得每个的共享计数,所以我需要调用一个函数来获得相同的。 我试图调用函数ng-init,但是对于所有产品,它都是最后一次产品计数

这是我的示例代码

     <div ng-repeat="(key,popc) in product" class="courses-outer-div">       
          <div class="courses-text-div">
          <div class="course-title-div">
          {{popc.Title}}
          </div><br />
          <span class="ash-txt-sml">{{popc.ListFee|currency:"₹":0}}</span><br/>

<div class="common-left pad-top-10"><span class="blue-txt">Share</span><br />
<a target="_blank"  href="http://facebook.com/sharer.php?u=url&i=imagurl" target="_blank">
<img src="images/share-fb.png" width="24" height="23" alt="" /></a>
<div ng-init="getfbshare(popc.id)">{{fbcount}}</div>
</div>
</div></div>

Controller.js

$scope.getfbshare = function(id)
    {       
        $http.get('/api/fbcount'+id).then(function(response)
        {
            alert("f"+response.data.share.share_count)
            $scope.fbcount = response.data.share.share_count;           
        });
    };

警告显示正确的值。

由于ng-repeat $scope.fbcount正在取最后一个值。

请帮我找出解决方案

1 个答案:

答案 0 :(得分:3)

您的getfbshare方法在范围($scope.fbcount)上设置了一个固定值,该值将被对该函数的任何后续调用覆盖。

您可以传递整个popc.id对象,而不是将popc传递给您的函数,然后在响应中,您可以修改对象,如下所示:

$scope.getfbshare = function(popc)
{       
    $http.get('/api/fbcount'+popc.id).then(function(response)
    {
        popc.fbcount = response.data.share.share_count;           
    });
};

然后,在您看来:

<div ng-init="getfbshare(popc)">{{popc.fbcount}}</div>

理想情况下,您应该在应用生命周期的不同部分调用该方法而不是使用ng-init