คลาสที่แตกต่างกันสำหรับองค์ประกอบสุดท้ายใน ng-repeat


152

ฉันกำลังสร้างรายการโดยใช้ซ้ำสิ่งเช่นนี้

  <div ng-repeat="file in files">
   {{file.name}}
   </div>

แต่สำหรับองค์ประกอบสุดท้ายเพียงอย่างเดียวฉันต้องการให้มีคลาส ( <div class="last">test</div>) รวมอยู่ด้วย ฉันจะบรรลุสิ่งนี้ได้อย่างไรโดยใช้ ng-repeat?


ติดอยู่เหมือนกันจาก 2 ชั่วโมงล่าสุด :)
Anshul

คำตอบ:


241

คุณสามารถใช้$lastตัวแปรภายในng-repeatคำสั่ง ลองดูที่เอกสาร

คุณสามารถทำได้เช่นนี้:

 <div ng-repeat="file in files" ng-class="computeCssClass($last)">
 {{file.name}}
 </div>

ไหนcomputeCssClassฟังก์ชั่นของการเป็นcontrollerซึ่งจะมีการโต้แย้ง แต่เพียงผู้เดียวและผลตอบแทนหรือ'last'null

หรือ

  <div ng-repeat="file in files" ng-class="{'last':$last}">
  {{file.name}}
  </div>

1
ฉันดูที่ก่อนหน้านี้ แต่ไม่สามารถหาวิธีการใช้ $ ล่าสุด .. มีตัวอย่างไม่มากออกมี
ราหุล

@Rahul ฉันได้รับคำตอบที่อัปเดตแล้ว คุณเข้าใจสิ่งที่ฉันกำลังพูดถึงหรือไม่
พอลบริต

8
ใช่ .. ฉันยังได้รับคำตอบจากกลุ่ม Google อีกด้วย <div ng-repeat="file in files" ng-class="{last: $last}"> {{file.name}} </div>
Rahul

1
@Rahul ฉันเดาคำตอบของคุณดีกว่าของฉัน
พอลบริต

@Rahul น่าเศร้าจริง ๆ ใช้กับฉันได้ คุณมีอะไรในคอนโซลนักพัฒนาซอฟต์แวร์
พอลบริต

23

ง่ายและสะอาดกว่าด้วย CSS

HTML:

<div ng-repeat="file in files" class="file">
  {{ file.name }}
</div>

CSS:

.file:last-of-type {
    color: #800;
}

:last-of-typeเลือกได้รับการสนับสนุนในขณะนี้โดย 98% ของเบราว์เซอร์


3
โซลูชั่นสำหรับ AngularJS ในทาง CSS 👌
โม

1
หมายเหตุ: สิ่งนี้จะไม่ทำงานเมื่อng-repeatมีการติดตาม<div class="file"><!-- dummy for creating new element --></div>และคุณต้องการแยกรายการของไฟล์. div ที่มีอยู่
DerMike

1
@DerMike ในกรณีที่คุณใส่คลาสอื่นลงในng-repeatองค์ประกอบเพื่อแยกความแตกต่างจากส่วนท้ายdiv
Aidan

14

เพื่ออธิบายรายละเอียดเกี่ยวกับคำตอบของ Paul นี่คือตรรกะของตัวควบคุมที่เกิดขึ้นพร้อมกับรหัสเทมเพลต

// HTML
<div class="row" ng-repeat="thing in things">
  <div class="well" ng-class="isLast($last)">
      <p>Data-driven {{thing.name}}</p>
  </div>
</div>

// CSS
.last { /* Desired Styles */}

// Controller
$scope.isLast = function(check) {
    var cssClass = check ? 'last' : null;
    return cssClass;
};

นอกจากนี้ยังเป็นที่น่าสังเกตว่าคุณควรหลีกเลี่ยงโซลูชันนี้หากเป็นไปได้ โดยธรรมชาติ CSS สามารถจัดการกับสิ่งนี้ได้ทำให้การแก้ปัญหาแบบ JS นั้นไม่จำเป็นและไม่ได้มีประสิทธิภาพ น่าเสียดายถ้าคุณต้องการสนับสนุน IE8> วิธีนี้จะไม่ทำงานสำหรับคุณ ( ดูเอกสารสนับสนุน MDN )

โซลูชัน CSS เท่านั้น

// Using the above example syntax
.row:last-of-type { /* Desired Style */ }

หมายเหตุ: CSS-only solution จะไม่ทำงานหากมีการใช้คลาส. nng-hide ในองค์ประกอบสุดท้ายเป็น: last-child ไม่เกี่ยวข้องกับตัวเองว่าองค์ประกอบนั้นถูกเรนเดอร์บนหน้าจอหรือไม่ แต่เป็นตัวสุดท้าย องค์ประกอบภายในชุดในมาร์กอัป fiddle.jshell.net/p5qe82w4/4
Kerry Johnson

7
<div ng-repeat="file in files" ng-class="!$last ? 'class-for-last' : 'other'">
   {{file.name}}
</div>

นั่นเหมาะกับฉัน! โชคดี!


ดังนั้นหากไม่ใช่ $ last ก็จะมีคลาสสำหรับต่อไปและองค์ประกอบสุดท้ายจะมีคลาสอื่น ...
strwoc

2

คุณสามารถใช้limitToตัวกรอง-1เพื่อค้นหาองค์ประกอบสุดท้าย

ตัวอย่าง :

<div ng-repeat="friend in friends | limitTo: -1">
    {{friend.name}}
</div>

0

คำตอบที่ได้รับจาก Fabian Perez ทำให้ฉันด้วยการเปลี่ยนแปลงเล็กน้อย

html ที่แก้ไขอยู่ที่นี่:

<div ng-repeat="file in files" ng-class="!$last ? 'other' : 'class-for-last'"> {{file.name}} </div>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.