ng-repeatの最後の要素の異なるクラス


152

このようなng-repeatを使用してリストを作成しています

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

ただし、最後の要素だけに、クラス(<div class="last">test</div>)を含めたいと思います。ng-repeatを使用してこれをどのように達成できますか?


過去2時間から同じままでした:)
Anshul 2015年

回答:


241

ディレクティブ$last内で変数を使用できますng-repeatdocを見てください。

あなたはこのようにそれを行うことができます:

 <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
私は以前にそれを見ましたが、$ lastをどのように使用するか正確に理解できませんでした。そこにも多くの例はありません。
Rahul、2013年

@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
CSSによるAngularJSのソリューション👌–
Mo.

1
注:ng-repeatが後に続いている場合、これは機能せず<div class="file"><!-- dummy for creating new element --></div>、既存の.file divのリストを分けて表示したいとします。
DerMike 2016

1
@DerMikeであなたは上の別のクラスを入れたい場合、そのng-repeat末尾からそれらを区別する要素div
エイダン

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

注:.ng-hideクラスが最後の要素に適用されている場合、CSSのみのソリューションは機能しません。:last-childは、要素が画面に表示されるかどうかに関係なく、文字通り最後の要素であるかどうかに関係しません。マークアップ内のセット内の要素。 fiddle.jshell.net/p5qe82w4/4
ケリージョンソン

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

それは私のために働きます!幸運を!


それは$最後のではないのであれば、それは、クラスのための最後を持っており、最後の要素は、他のクラス...持っている
strwoc

2

あなたは最後の要素を見つけるためにlimitToフィルターを使うことができます-1

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

0

ファビアンペレスの答えは、少し変更されてうまくいきました

編集された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.