ฉันจะใช้ ng-repeat like forใน Javascript ได้อย่างไร
ตัวอย่าง:
<div ng-repeat="4">Text</div>
ฉันต้องการทำซ้ำด้วย ng-repeat 4 ครั้ง แต่ฉันจะทำอย่างไร
ฉันจะใช้ ng-repeat like forใน Javascript ได้อย่างไร
ตัวอย่าง:
<div ng-repeat="4">Text</div>
ฉันต้องการทำซ้ำด้วย ng-repeat 4 ครั้ง แต่ฉันจะทำอย่างไร
items
.. ?
คำตอบ:
Angular มาพร้อมกับ limitTo: limit filter รองรับการ จำกัด x รายการแรกและ x รายการสุดท้าย:
<div ng-repeat="item in items|limitTo:4">{{item}}</div>
items
นี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุดที่ฉันคิดได้
<span ng-repeat="n in [].constructor(5) track by $index">
{{$index}}
</span>
นี่คือตัวอย่าง Plunker
Error: [$parse:isecfld]
คุณสามารถใช้เมธอด slice ในวัตถุอาร์เรย์จาวาสคริปต์
<div ng-repeat="item in items.slice(0, 4)">{{item}}</div>
สั้น n หวาน
item in items|limitTo:4
ใน html:
<div ng-repeat="t in getTimes(4)">text</div>
และในตัวควบคุม:
$scope.getTimes=function(n){
return new Array(n);
};
http://plnkr.co/edit/j5kNLY4Xr43CzcjM1gkj
แก้ไข:
ด้วย angularjs> 1.2.x
<div ng-repeat="t in getTimes(4) track by $index">TEXT</div>
t in [1,2,3,4]
หรือt in 'aaaa'
อื่น ๆ :)
[1,2,3,4]
.. ช่างเป็นวิธีแก้ปัญหาที่น่าหดหู่ใจอะไรอย่างนี้
คำตอบที่ระบุโดย @mpm ไม่ทำงานมันทำให้เกิดข้อผิดพลาด
ไม่อนุญาตให้มีการทำซ้ำในตัวทำซ้ำ ใช้นิพจน์ 'track by' เพื่อระบุคีย์เฉพาะ Repeater: {0} คีย์ซ้ำ: {1}
เพื่อหลีกเลี่ยงปัญหานี้ควบคู่ไปด้วย
ng-repeat = "t ใน getTimes (4)"
ใช้
ติดตามโดย $ index
แบบนี้
<div ng-repeat = "t ใน getTimes (4) ติดตามโดย $ index"> TEXT </div>
ที่จะทำซ้ำ7ครั้งพยายามที่จะใช้อาร์เรย์ที่มีความยาว = 7แล้วติดตามมันโดย $ ดัชนี :
<span ng-repeat="a in (((b=[]).length=7)&&b) track by $index" ng-bind="$index + 1 + ', '"></span>
b=[]
สร้างอาร์เรย์ว่าง« b »
.length=7
ตั้งขนาดเป็น« 7 »
&&b
ปล่อยให้อาร์เรย์« b »ใหม่พร้อมใช้งานสำหรับ ng-repeat โดย
track by $index
ที่« $ index »คือตำแหน่งของการวนซ้ำ
ng-bind="$index + 1"
แสดงผลเริ่มต้นที่ 1
ที่จะทำซ้ำXครั้ง
เพียงแค่เปลี่ยน7โดยX
คำตอบทั้งหมดที่นี่ดูเหมือนจะถือว่ารายการเป็นอาร์เรย์ อย่างไรก็ตามใน AngularJS อาจเป็นวัตถุเช่นกัน ในกรณีนั้นการกรองด้วย limitTo หรือ array.slice จะไม่ทำงาน วิธีหนึ่งที่เป็นไปได้คือคุณสามารถแปลงวัตถุของคุณเป็นอาร์เรย์ได้หากคุณไม่รังเกียจที่จะทำคีย์วัตถุหาย นี่คือตัวอย่างของตัวกรองที่ต้องทำ:
myFilter.filter('obj2arr', function() {
return function(obj) {
if (typeof obj === 'object') {
var arr = [], i = 0, key;
for( key in obj ) {
arr[i] = obj[key];
i++;
}
return arr;
}
else {
return obj;
}
};
});
เมื่อเป็นอาร์เรย์แล้วให้ใช้ slice หรือ limitTo ตามที่ระบุไว้ในคำตอบอื่น ๆ