angular.js ng-repeatの組み込み変数

ng-repeatのビルトイン変数を利用してtableの背景色を一行おきに設定

AngularJSのng-repeatディレクティブで利用できる変数

ng-repeatの組み込み(ビルトイン)変数は利用頻度が高いプロパティ。

AngularJSの公式サイトでは以下のURL(英語)で使い方を確認できる。

https://docs.angularjs.org/api/ng/directive/ngRepeat

本記事では、

  • $index
  • $middle
  • $even
  • $odd

を利用してtableタブ内における繰り返し処理で、ng-repeatの組み込み変数を使ったサンプルを紹介する。

サンプルコード

headタグ内では、foundation(cssフレームワーク)とangularjs本体を読み込み、サンプルとなるModelデータを定義している。

<html ng-app="webEngineerSampleApp">
<head>
    <title>title</title>
    <link href="http://cdn.foundation5.zurb.com/foundation.css" rel="stylesheet" />
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>
    <script>
        angular.module("webEngineerSampleApp", [])
            .controller("repeatCtrl", function ($scope) {
                $scope.thread = [
                    { answer: "test engineer", response: false },
                    { answer: "test blog", response: false },
                    { answer: "blog test", response: false },
                    { answer: "web engineer test", response: true },
                    { answer: "web title", response: false }];
            });
    </script>
</head>

上のデータをng-repeatを利用してtableで表現する。

<div class="panel" ng-controller="repeatCtrl">
    <h3>Thread Title</h3>
    <table>
        <thead>
            <tr>
                <th>id</th>
                <th>Answer</th>
                <th>Response</th>
            </tr>
        </thead>
        <tr ng-repeat="e in thread">
            <td>{{$index + 1}}</td>
            <td ng-repeat="field in e">{{field}}</td>
        </tr>
    </table>
</div>

ng-repeatを入れ子にして行と列の双方で繰り返し処理をしている。ビルトイン変数の$indexを利用して添え字を表示している。上のコードの実行結果は下の画像のようになった。

ng-repeat-table

$evenを利用して行に色を付ける

$evenを利用してtable内の行に一行おきに色を付けてみたい。

<tr ng-repeat="e in thread" ng-class="$even ? 'even' : ''">

ng-classディレクティブの値として条件式を定義することで、trueの場合にevenというclass属性を設定することが可能。ng-classの条件式については、以下の記事にまとめられているので参考にして頂きたい。

http://dim5.net/angularjs/ng-class-conditional.html

foundation5の話題になるが、evenのclass属性を有効にするために以下のcssが必要になる模様。

<style>
table tr:nth-of-type(even) {
    background-color: transparent !important;
}
</style>

stackoverflowのquestionを参考に上のcssを追加したところ、行に色を付けることができた。

ng-repeat-table-even

$middleを利用して先頭と最後の行を区別する

ng-repeatの組み込み変数$middleを利用すれば、先頭と最後の行を区別することが可能。ng-ifディレクティブと$middleを利用して先頭と最後の行を非表示にしてみる。

<tr ng-repeat="e in thread" ng-if="$middle">

1行目と5行目が表示しないようにすることができた。

ng-repeat-table-if

先頭と最後の行を個別に区別したい場合には、

  • $first
  • $last

双方の変数を利用することができる。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

angular.js ng-repeatの組み込み変数の記事にコメントを投稿