将数组中的值计入ng-repeat

时间:2014-09-25 13:10:32

标签: angularjs each

我有这些数据:http://www.monde-du-rat.fr/API/moulinette/radio/posts.json,来自cakephp app,它是一首歌,附有投票

我将它用作angularjs应用程序的服务,我在html中显示如下:

            <div ng-repeat="song in songs | orderBy:'Radio.idSong' | notesong:'Radiovote'" class="list-group-item" id="{{song.Radio.idSong}}" ng-class="{ 'active' : songPlayed_name == song.Radio.name }" ng-if="songs">
                <span>{{song.Radio.idSong}} - {{song.Radio.title}}</span><br />
                <span>{{note}}%</span>
            </div>

所以,我想计算每一个附加的投票,并用价值观来定义好的&#39;或者&#39;坏&#39;,喜欢的百分比

我尝试制作这个过滤器:

/* notesong */
app.filter('notesong', function() {
    return function(input) {

    // counter init
    var countGood = 0;

    // if there is no votes, so note is zero
    if (!angular.isArray(input)) {
        var note = 0;
    } else {
        // loop for each vote (from Radiovote array, each value)
        angular.forEach(input, function () {
            if (input.value == 'good') {
                countGood = countGood + 1;
            }
        });
        var note = (countGood * input.length) / 100;
    }

    // final return
    return note;

    };
});

它显然不起作用(没有错误,也没有显示数据),那么,正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

您正在将过滤器应用于错误的位置。而不是在ng-repeat上使用它,你应该在你想要绑定的属性上使用它,如下所示:

<div ng-repeat="song in songs | orderBy:'Radio.idSong'" class="list-group-item" id="{{song.Radio.idSong}}" ng-class="{ 'active' : songPlayed_name == song.Radio.name }" ng-if="songs">
  <span>{{song.Radio.idSong}} - {{song.Radio.title}}</span><br />
  <span>{{song.Radiovote | notesong}}%</span>
</div>

您在过滤器中循环投票的方式也存在问题。更新以下行:

// loop for each vote (from Radiovote array, each value)
angular.forEach(input, function (item) {
  if (item.value == 'good') {
    countGood = countGood + 1;
  }
});