我有这些数据: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;
};
});
它显然不起作用(没有错误,也没有显示数据),那么,正确的方法是什么?
答案 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;
}
});