Дякую за ваші пропозиції, ви вивели мене на правильний шлях!
Перейдемо до повного пояснення:
За замовчуванням AngularJS http отримати запит повертає об'єкт
Отже, якщо ви хочете використовувати функцію @Ariel Array.prototype.chunk, вам потрібно спочатку перетворити об'єкт у масив.
А потім використовувати функцію " ЧАК" у ВАШОМУ КОНТРОЛЕРІ, інакше при використанні прямо в ng-повторенні це призведе до помилки вкладки . Кінцевий контролер виглядає:
// 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);
});
І HTML стає:
<div class="row" ng-repeat="productrow in products">
<div class="col-sm-4" ng-repeat="product in productrow">
З іншого боку, я вирішив безпосередньо повернути масив [] замість об'єкта {} з мого файлу JSON. Таким чином, контролер стає (зверніть увагу на конкретний синтаксис 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 залишається таким же, як вище.
ОПТИМІЗАЦІЯ
Останнє запитання в напрузі: як зробити це 100% AngularJS без розширення масиву javascript з функцією "... . Мені цікаво ;)
ЕНДРЕЙСЬКЕ РІШЕННЯ
Завдяки @Andrew, тепер відомо, що додавання класу очищення для завантажувального коду кожен три (або будь-яке число) елемент виправляє проблему відображення з висоти блоку різниці.
Отже 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}}
А ваш контролер залишається досить м'яким із вилученою функцією:
// 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;
});