使用angularjs使用ng-repeat和json数据进行CSS星级评级
CSS Star Rating with ng-repeat and json data using angularjs
希望根据从JSON接收到的值显示一个div
n次
$scope.pro = [
{
product: "chicken",
rating: 3
},
{
product: "fish",
rating: 3
},
{
product: "pizza",
rating: 4
}
];
如果一个产品有3个评级意味着div
必须显示三次,如星级。
如何在angular.js中实现呢?
My Plunker Demo
你可以试试这个吗,
JS
$scope.pro = [{product: "chicken", rating: 3},{product: "fish", rating: 3},{product: "pizza", rating: 4}];
var ratingTotal = 5;
$scope.getRepeater = function() {
return new Array(ratingTotal);
};
Html<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script data-require="angular.js@1.3.15" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-controller="myController">
<div ng-repeat="array in pro">{{array.product}} <span class="star-icon" ng-repeat="r in getRepeater() track by $index" ng-class="{'full': ($index + 1) <= array.rating, 'half': ($index + .5) == array.rating}" ></span></div>
</body>
</html>
注意:所选星的类名被提到为'full',您可以随意更改。
geNumber()
将创建一个具有评级大小的空数组。无论
ng-repeat
都会迭代它。 track by $index
在这种情况下是必要的,因为您将多次显示相同的值,并且不允许在重复器中重复
var app = angular.module('myApp', []);
app.controller('myController', function($scope) {
$scope.pro = [{
product: "chicken",
rating: 3
}, {
product: "fish",
rating: 3
}, {
product: "pizza",
rating: 4
}];
$scope.getNumber = function(num){
return new Array(num);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp" ng-controller="myController">
<div ng-repeat="item in pro">
<div ng-repeat="n in getNumber(item.rating) track by $index">
{{item.product}}
</div>
</div>
</body>
您可以根据评级创建一个数组。然后在数组上重复:
<div ng-repeat="array in pro">
{{array.product}} , <span ng-repeat="n in createArray(array.rating) track by $index">X</span>
</div>
在你的控制器中:
$scope.createArray = function(n){
return new Array(n);
}
https://plnkr.co/edit/gUPn6m7Tiu01yksa9VOs?p =预览
如果你喜欢,你可以使用这个ES6解决方案来显示x个*:
注意:不支持IE。
JS
$scope.getAsterisks = rating => Array.from('*'.repeat(parseInt(rating, 10)));