ขอบคุณสำหรับคำแนะนำของคุณคุณมาถูกทางแล้ว!
ไปดูคำอธิบายที่สมบูรณ์กันเถอะ:
โดยค่าเริ่มต้นการสอบถาม AngularJS http get จะส่งคืนวัตถุ
ดังนั้นหากคุณต้องการใช้ฟังก์ชัน @Ariel Array.prototype.chunk คุณต้องเปลี่ยนวัตถุเป็นอาร์เรย์ก่อน
และจากนั้นจะใช้ฟังก์ชั่นก้อนในการควบคุมของคุณมิฉะนั้นถ้าใช้โดยตรงใน ng ซ้ำก็จะนำคุณไปยังข้อผิดพลาด infdig ตัวควบคุมสุดท้ายมีลักษณะ:
// 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 ยังคงเหมือนเดิม
การเพิ่มประสิทธิภาพ
คำถามสุดท้ายในใจคือ: ทำอย่างไรให้ AngularJS 100% โดยไม่ต้องขยายอาร์เรย์จาวาสคริปต์ด้วยฟังก์ชั่นก้อน ... ถ้าบางคนสนใจที่จะแสดงให้เราเห็นว่า ng-repeat-start และ ng-repeat-end เป็นวิธีที่จะไป .. . ฉันอยากรู้ ;)
โซลูชันของ ANDREW
ขอบคุณ @Andrew ตอนนี้เรารู้แล้วว่าการเพิ่มคลาส bootstrap clearfix ทุกๆสามองค์ประกอบ (หรือตัวเลขใดก็ได้) ช่วยแก้ไขปัญหาการแสดงผลจากความสูงของบล็อก differents
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}}
และคอนโทรลเลอร์ของคุณยังคงค่อนข้างนุ่มนวลด้วยฟังก์ชันchunck ที่ถูกลบออก :
// 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;
});