Ich versuche ng-repeat
auf einem div
zu verwenden, die ein Sternbild enthalten sollte, jeder Kuchen in der JSON hat eine rating
Eigenschaft von 1-5, und ich möchte diesen Wert verwenden, um aus zu loopen x Anzahl der Sterne. Ich habe das etwas funktioniert, aber es ist fehlerhaft in der Art, dass ich das Array nicht neu sortieren kann und die Sterne dem richtigen Element in der Liste folgen lassen, da ich [$index]
verwende, um die Iteration zu verfolgen.Ng-Wiederholung auf Integer-Wert
Meine Lösung ist auch ziemlich hässlich, da ich Arrays mit so vielen Indexplatzhaltern wie der Wert der rating
-Eigenschaft erstelle und diese dann in ein Array verschiebe, um die entsprechende Anzahl von Bildern auszulösen. Ich hätte gerne eine elegantere Lösung.
Wie sollte ich über dieses Problem gehen, ohne [$index]
zu verwenden?
Snippet des JSON:
{"pies": [
...
{
"name": "Blueberry pie",
"imageUrl": "img/blueberrypie.png",
"id": "1",
"rating": "5", //Ng-repeat depending on this value
"description": "Blueberry pie is amazing."
},
...
]}
Mein Controller:
pieShopApp.controller('shopCtrl', ['$scope', '$http', '$routeParams', function ($scope, $http, $routeParams) {
$scope.pieId = $routeParams.pieId,
$scope.sortingOptions = ['A-Z', 'Rating'],
$scope.sortingValues = ['name', 'rating'],
$scope.ratings = [],
$http.get('jsons/pies.json')
.success(function(data, status) {
$scope.pies = data;
for (i = 0; i < $scope.pies.pies.length; i++) {
switch ($scope.pies.pies[i].rating) {
case "1": $scope.ratings.push(["1"]); break;
case "2": $scope.ratings.push(["1", "2"]); break;
case "3": $scope.ratings.push(["1", "2", "3"]); break;
case "4": $scope.ratings.push(["1", "2", "3", "4"]); break;
case "5": $scope.ratings.push(["1", "2", "3", "4", "5"]); break;
}
}
console.log($scope.ratings);
})
.error(function(status) {
console.log(status);
})
}]);
Die Liste, die die Torte Elemente enthält:
<div id="pie-list-wrapper">
<ul class="nav">
<a href="#/pies/pieid" ng-repeat="pie in pies.pies | filter:query | orderBy:orderProp">
<li class="list-item rounded-corners box-shadow">
<aside>
<img src="{{pie.imageUrl}}" no-repeat alt="Image of the pie">
</aside>
<header>
<h1 ng-bind="pie.name" id="item-name" class="bold-text"></h1>
</header>
<article>
<span ng-bind="pie.description" id="item-desc"></span>
</article>
<footer id="item-rating">
<div ng-repeat="rating in ratings[$index]" class="rating-box"></div> //Contains the stars
</footer>
</li>
</a>
</ul>
</div>
Ergebnis:
vielleicht http://stackoverflow.com/questions/16824853/way-to-ng-repeat- defined-number-statt-von-repeated-over-array wird helfen – cyan
@cyan sah sich das schon zweimal an, konnte aber nicht herausfinden, wie es in meinem Fall funktioniert. – Chrillewoodz
$ scope.ratings ist in der gleichen Reihenfolge wie json Daten gefüllt? Übrigens, könnten Sie Code in Erfolgsfunktion machen eine andere Funktion für die Code-Reinigung machen? – cyan