Cảm ơn những gợi ý của bạn, bạn đã giúp tôi đi đúng đường!
Hãy đi tìm lời giải thích đầy đủ:
Theo mặc định, truy vấn get của AngularJS http trả về một đối tượng
Vì vậy, nếu bạn muốn sử dụng hàm @Ariel Array.prototype.chunk, trước tiên bạn phải chuyển đổi đối tượng thành một mảng.
Và sau đó để sử dụng chức năng chunk TRONG BỘ ĐIỀU KHIỂN CỦA BẠN, nếu không nếu được sử dụng trực tiếp vào ng-repeat, nó sẽ đưa bạn đến lỗi infdig . Bộ điều khiển cuối cùng trô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);
});
Và HTML trở thành:
<div class="row" ng-repeat="productrow in products">
<div class="col-sm-4" ng-repeat="product in productrow">
Mặt khác, tôi quyết định trả về trực tiếp một mảng [] thay vì một đối tượng {} từ tệp JSON của mình. Bằng cách này, controller trở thành (vui lòng lưu ý cú pháp cụ thể là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);
});
HTML giữ nguyên như trên.
TỐI ƯU HÓA
Câu hỏi cuối cùng hồi hộp là: làm thế nào để tạo 100% AngularJS mà không cần mở rộng mảng javascript với chức năng chunk ... nếu một số người quan tâm hãy chỉ cho chúng tôi xem ng-repeat-start và ng-repeat-end có phải là cách để đi .. . Tôi tò mò ;)
GIẢI PHÁP CỦA ANDREW
Nhờ @Andrew, bây giờ chúng ta biết thêm một lớp bootstrap clearfix mỗi ba phần tử (hoặc bất kỳ số nào) để khắc phục sự cố hiển thị từ chiều cao của khối diffnts.
Vì vậy, HTML trở thành:
<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}}
Và bộ điều khiển của bạn vẫn khá mềm với chức năng chunck bị loại bỏ :
// 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;
});