Merci pour vos suggestions, vous m'avez mis sur la bonne voie!
Allons-y pour une explication complète:
Par défaut, AngularJS http get query renvoie un objet
Donc, si vous voulez utiliser la fonction @Ariel Array.prototype.chunk, vous devez d'abord transformer l'objet en tableau.
Et puis pour utiliser la fonction chunk DANS VOTRE CONTRÔLEUR sinon si elle est utilisée directement dans ng-repeat, cela vous amènera à une erreur infdig . Le contrôleur final ressemble:
// 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);
});
Et le HTML devient:
<div class="row" ng-repeat="productrow in products">
<div class="col-sm-4" ng-repeat="product in productrow">
De l'autre côté, j'ai décidé de retourner directement un tableau [] au lieu d'un objet {} de mon fichier JSON. De cette façon, le contrôleur devient (veuillez noter la syntaxe spécifique 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);
});
Le HTML reste le même que ci-dessus.
OPTIMISATION
Dernière question en suspens: comment le rendre 100% AngularJS sans étendre le tableau javascript avec la fonction chunk ... si certaines personnes sont intéressées à nous montrer si ng-repeat-start et ng-repeat-end sont la voie à suivre .. . Je suis curieux ;)
LA SOLUTION D'ANDREW
Grâce à @Andrew, nous savons maintenant que l'ajout d'une classe bootstrap clearfix tous les trois éléments (ou n'importe quel nombre) corrige le problème d'affichage à partir de différentes hauteurs de bloc.
Le HTML devient donc:
<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}}
Et votre contrôleur reste assez doux avec la fonction chunck supprimée :
// 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;
});