Grazie per i tuoi suggerimenti, mi hai messo sulla strada giusta!
Andiamo per una spiegazione completa:
Per impostazione predefinita, la query http di AngularJS restituisce un oggetto
Quindi, se vuoi usare la funzione @Ariel Array.prototype.chunk devi prima trasformare l'oggetto in un array.
E poi usare la funzione chunk NEL TUO CONTROLLER altrimenti se usato direttamente in ng-repeat, ti porterà a un errore di infdig . Il controller finale sembra:
// 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);
});
E l'HTML diventa:
<div class="row" ng-repeat="productrow in products">
<div class="col-sm-4" ng-repeat="product in productrow">
Dall'altro lato, ho deciso di restituire direttamente un array [] invece di un oggetto {} dal mio file JSON. In questo modo, il controller diventa (si prega di notare la sintassi specifica èArray: 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);
});
L'HTML rimane lo stesso di sopra.
OTTIMIZZAZIONE
L'ultima domanda in sospeso è: come renderlo 100% AngularJS senza estendere l'array javascript con la funzione chunk ... se alcune persone sono interessate a mostrarci se ng-repeat-start e ng-repeat-end sono la strada da percorrere .. . Sono curioso ;)
LA SOLUZIONE DI ANDREW
Grazie a @Andrew, ora sappiamo che l'aggiunta di una classe clearfix bootstrap ogni tre (o qualsiasi numero) elemento corregge il problema di visualizzazione dall'altezza del blocco diverso.
Quindi HTML diventa:
<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}}
E il tuo controller rimane abbastanza morbido con la funzione chunck rimossa :
// 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;
});