Lớp khác nhau cho phần tử cuối cùng trong ng-repeat


152

Tôi đang tạo một danh sách bằng cách sử dụng ng-repeat một cái gì đó như thế này

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

Nhưng đối với phần tử cuối cùng, tôi muốn có một lớp ( <div class="last">test</div>) đi kèm với nó. Làm thế nào tôi có thể đạt được điều này bằng cách sử dụng ng-repeat?


đã bị mắc kẹt trên cùng từ 2 giờ trước :)
Anshul

Câu trả lời:


241

Bạn có thể sử dụng $lastbiến trong ng-repeatchỉ thị. Hãy xem tài liệu .

Bạn có thể làm như thế này:

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

Trường hợp computeCssClasschức năng trong controllerđó có đối số duy nhất và trả về 'last'hoặc null.

Hoặc là

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

1
tôi đã xem xét điều đó sớm hơn nhưng không thể biết chính xác cách sử dụng $ cuối cùng .. cũng không có nhiều ví dụ.
Raul

@Rahul, tôi đã cập nhật câu trả lời. Bạn có hiểu tôi đang nói về cái gì không?
Paul Brit

8
vâng .. Tôi cũng nhận được một câu trả lời khác từ các nhóm google <div ng-repeat="file in files" ng-class="{last: $last}"> {{file.name}} </div>
Rahul

1
@Rahul, tôi đoán, câu trả lời của bạn tốt hơn của tôi.
Paul Brit

@Rahul, thực sự đáng buồn, nó làm việc cho tôi. Bạn có gì trong bảng điều khiển dành cho nhà phát triển?
Paul Brit

23

Làm điều đó dễ dàng và sạch sẽ hơn với CSS.

HTML:

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

CSS:

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

Bộ :last-of-typechọn hiện được 98% trình duyệt hỗ trợ


3
Giải pháp cho AngularJS theo cách CSS
Mo.

1
NB: Điều này không hoạt động khi ng-repeatđược theo dõi <div class="file"><!-- dummy for creating new element --></div>và bạn muốn phân tách danh sách các div .file hiện có .
DerMike

1
@DerMike Trong trường hợp đó, bạn đặt một lớp khác vào các ng-repeatyếu tố để phân biệt chúng với dấu vếtdiv
Aidan

14

Để giải thích câu trả lời của Paul, đây là logic của bộ điều khiển trùng với mã mẫu.

// 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;
};

Cũng đáng lưu ý rằng bạn thực sự nên tránh giải pháp này nếu có thể. Về bản chất, CSS có thể xử lý việc này, làm cho một giải pháp dựa trên JS là không cần thiết và không hiệu quả. Thật không may nếu bạn cần hỗ trợ IE8> giải pháp này sẽ không hiệu quả với bạn ( xem tài liệu hỗ trợ MDN ).

Giải pháp chỉ CSS

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

Lưu ý: Giải pháp chỉ CSS không hoạt động nếu lớp .ng-hidden được áp dụng cho phần tử cuối cùng là: Last-child không quan tâm đến việc phần tử có được hiển thị trên màn hình hay không, nhưng liệu nó có đúng theo nghĩa đen không phần tử trong tập hợp trong đánh dấu. fiddle.jshell.net/p5qe82w4/4
Kerry Johnson

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

Nó ổn với tôi! Chúc may mắn!


Vì vậy, nếu nó không phải là $ cuối cùng, nó có lớp cuối cùng và phần tử cuối cùng có lớp khác ...
strwoc

2

Bạn có thể sử dụng limitTobộ lọc -1để tìm phần tử cuối cùng

Ví dụ :

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

0

Câu trả lời được đưa ra bởi Fabian Perez đã làm việc cho tôi, với một chút thay đổi

Đã chỉnh sửa html tại đây:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.