Vielen Dank für Ihre Vorschläge, Sie haben mich auf den richtigen Weg gebracht!
Lassen Sie uns eine vollständige Erklärung geben:
Standardmäßig gibt AngularJS http get query ein Objekt zurück
Wenn Sie also die Funktion @Ariel Array.prototype.chunk verwenden möchten, müssen Sie zuerst das Objekt in ein Array umwandeln.
Wenn Sie dann die Chunk-Funktion IN YOUR CONTROLLER verwenden, wird sie bei direkter Verwendung in ng-repeat zu einem Infdig-Fehler geführt . Der endgültige Controller sieht aus:
// Initialize products to empty list
$scope.products = [];
// Load products from config file
$resource("/json/shoppinglist.json").get(function (data_object)
{
// Transform object into array
var data_array =[];
for( var i in data_object ) {
if (typeof data_object[i] === 'object' && data_object[i].hasOwnProperty("name")){
data_array.push(data_object[i]);
}
}
// Chunk Array and apply scope
$scope.products = data_array.chunk(3);
});
Und HTML wird:
<div class="row" ng-repeat="productrow in products">
<div class="col-sm-4" ng-repeat="product in productrow">
Auf der anderen Seite habe ich beschlossen, ein Array [] anstelle eines Objekts {} direkt aus meiner JSON-Datei zurückzugeben. Auf diese Weise wird der Controller (bitte beachten Sie die spezifische Syntax isArray: true ):
// Initialize products to empty list
$scope.products = [];
// Load products from config file
$resource("/json/shoppinglist.json").query({method:'GET', isArray:true}, function (data_array)
{
$scope.products = data_array.chunk(3);
});
HTML bleibt wie oben.
OPTIMIERUNG
Die letzte spannende Frage lautet: Wie kann man 100% AngularJS erstellen, ohne das Javascript-Array mit der Chunk-Funktion zu erweitern? Wenn einige Leute uns zeigen möchten, ob ng-repeat-start und ng-repeat-end der richtige Weg sind. . Ich bin neugierig ;)
ANDREWS LÖSUNG
Dank @Andrew wissen wir jetzt, dass das Hinzufügen einer Bootstrap-Clearfix-Klasse alle drei (oder eine beliebige Anzahl) Elemente das Anzeigeproblem aufgrund der unterschiedlichen Blockhöhe behebt.
So wird HTML:
<div class="row">
<div ng-repeat="product in products">
<div ng-if="$index % 3 == 0" class="clearfix"></div>
<div class="col-sm-4"> My product descrition with {{product.property}}
Und Ihr Controller bleibt mit entfernter Chunck- Funktion ziemlich weich :
// Initialize products to empty list
$scope.products = [];
// Load products from config file
$resource("/json/shoppinglist.json").query({method:'GET', isArray:true}, function (data_array)
{
//$scope.products = data_array.chunk(3);
$scope.products = data_array;
});