Terima kasih atas saran Anda, Anda membuat saya di jalan yang benar!
Mari kita lihat penjelasan lengkapnya:
Secara default AngularJS http mendapatkan query mengembalikan sebuah objek
Jadi jika Anda ingin menggunakan fungsi @Ariel Array.prototype.chunk Anda harus terlebih dahulu mengubah objek menjadi sebuah array.
Dan kemudian untuk menggunakan fungsi chunk DI CONTROLLER ANDA sebaliknya jika digunakan langsung ke ng-repeat, itu akan membawa Anda ke kesalahan infdig . Pengontrol terakhir terlihat:
// 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);
});
Dan HTML menjadi:
<div class="row" ng-repeat="productrow in products">
<div class="col-sm-4" ng-repeat="product in productrow">
Di sisi lain, saya memutuskan untuk langsung mengembalikan larik [] alih-alih objek {} dari file JSON saya. Dengan cara ini, pengontrol menjadi (harap perhatikan sintaks spesifik 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 tetap sama seperti di atas.
OPTIMASI
Pertanyaan terakhir dalam ketegangan adalah: bagaimana membuatnya 100% AngularJS tanpa memperluas array javascript dengan fungsi chunk ... jika beberapa orang tertarik untuk menunjukkan kepada kita jika ng-repeat-start dan ng-repeat-end adalah cara yang harus dilakukan .. . Saya penasaran ;)
SOLUSI ANDREW
Berkat @Andrew, kami sekarang tahu menambahkan kelas bootstrap clearfix setiap tiga (atau nomor berapa pun) elemen memperbaiki masalah tampilan dari ketinggian blok differents.
Jadi HTML menjadi:
<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}}
Dan pengontrol Anda tetap cukup lunak dengan fungsi chunck yang dihapus :
// 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;
});