AngularJS フィルタ

AngularJSにフィルタを追加してデータを形式化できます。

AngularJS フィルタ

AngularJSはデータを変換するためのフィルタを提供します:

  • currency 数字を通貨形式に形式化
  • date 日付を指定された形式に形式化
  • filter 配列からサブセットを選択
  • json オブジェクトを JSON 文字列に形式化
  • limitTo 配列/文字列を指定された数の要素/文字に制限
  • lowercase 文字列を小文字に形式化
  • number 数字を文字列に形式化
  • orderBy 表現を使って配列を並べ替えます
  • uppercase 文字列を大文字に形式化

表現にフィルタを追加

パイプ記号 | を使って、表現にフィルタを追加し、フィルタの後ろにさらにフィルタを追加できます。

uppercase フィルタは文字列を大文字に形式化します:

インスタンス

<div ng-app="myApp" ng-controller="personCtrl">
<p>名前は {{ lastName | uppercase }}</p>
</div>

自分で試してみる

lowercase フィルタは文字列を小文字に形式化します:

インスタンス

<div ng-app="myApp" ng-controller="personCtrl">
<p>名前は {{ lastName | lowercase }}</p>
</div>

自分で試してみる

指示子にフィルタを追加します

パイプ記号を使用して | フィルタを追加するには、以下のようにします ng-repeat

インスタンス

orderBy フィルタは配列をソートします:

<div ng-app="myApp" ng-controller="namesCtrl">
<ul>
  <li ng-repeat="x in names | orderBy:'country'">
    {{ x.name + ', ' + x.country }}
  </li>
</ul>
</div>

自分で試してみる

currency フィルタ

currency フィルタは数字を金額形式に形式化します:

インスタンス

<div ng-app="myApp" ng-controller="costCtrl">
<h1>価格: {{ price | currency }}</h1>
</div>

自分で試してみる

currency フィルタの詳細については、AngularJS currency フィルタ参照マニュアルを参照してください。

filter フィルタ

filter フィルタは配列のサブセットを選択します。

filter フィルタは配列のみを使用できます。一致する項目を含む配列を返します。

インスタンス

「i」の文字を含む名前を返します:

<div ng-app="myApp" ng-controller="namesCtrl">
<ul>
  <li ng-repeat="x in names | filter : 'i'">
    {{ x }}
  </li>
</ul>
</div>

自分で試してみる

filter フィルタの詳細については、AngularJS フィルタ参照マニュアルを参照してください。

ユーザー入力に基づいて配列をフィルタリングします

入力フィールドに設定することで ng-model 指示子命令,我们可以使用输入字段的值作为过滤器中的表达式。

入力フィールドに文字を入力すると、リストが一致する項目に基づいて縮小/拡大されます:

  • ジャニ
  • カール
  • マーガレット
  • ヘーゲ
  • ジョー
  • グスタフ
  • ビルゲット
  • メアリー
  • カイ

インスタンス

<div ng-app="myApp" ng-controller="namesCtrl">
<p><input type="text" ng-model="test"></p>
<ul>
  <li ng-repeat="x in names | filter : test">
    {{ x }}
  </li>
</ul>
</div>

自分で試してみる

ユーザー入力に基づいて配列をソートします

表頭をクリックすると、ソート順序が変更されます:

名前 国 ジャニ ノルウェイ カール スウェーデン マーガレット イングランド ヘーゲ ノルウェイ ジョー デンマーク グスタフ スウェーデン ビルゲット デンマーク メアリー イングランド カイ ノルウェイ

通过在表头添加 ng-click 指示子命令,我们可以运行一个函数,该函数会更改数组的排序顺序:

インスタンス

<div ng-app="myApp" ng-controller="namesCtrl">
<table border="1" width="100%">
  <tr>
    <th ng-click="orderByMe('name')">Name</th>
    <th ng-click="orderByMe('country')">Country</th>
  </tr>
  <tr ng-repeat="x in names | orderBy:myOrderBy">
    <td>{{x.name}}</td>
    <td>{{x.country}}</td>
  </tr>
</table>
</div>
<script>
angular.module('myApp', []).controller('namesCtrl', function($scope) {
  $scope.names = [
    {name:'Jani',country:'Norway'},
    {name:'Carl',country:'Sweden'},
    {name:'Margareth',country:'England'},
    {name:'Hege',country:'Norway'},
    {name:'Joe',country:'Denmark'},
    {name:'Gustav',country:'Sweden'},
    {name:'Birgit',country:'Denmark'},
    {name:'Mary',country:'England'},
    {name:'Kai',country:'Norway'}
  };
  $scope.orderByMe = function(x) {
    $scope.myOrderBy = x;
  }
});
</script>

自分で試してみる

カスタムフィルタ

新しいフィルターファクトリーファンクションをモジュールに登録することで、自分のフィルタを作成できます:

インスタンス

「myFormat」という名前のカスタムフィルタを作成します:

<ul ng-app="myApp" ng-controller="namesCtrl">
  <li ng-repeat="x in names">
    {{x | myFormat}}
  </li>
</ul>
<script>
var app = angular.module('myApp', []);
app.filter('myFormat', function() {
  return function(x) {}}
    var i, c, txt = "";
    for (i = 0; i < x.length; i++) {
      c = x[i];
      if (i % 2 == 0) {
        c = c.toUpperCase();
      }
      txt += c;
    }
    return txt;
  });
});
app.controller('namesCtrl', function($scope) {
  $scope.names = ['Jani', 'Carl', 'Margareth', 'Hege', 'Joe', 'Gustav', 'Birgit', 'Mary', 'Kai'];
});
</script>

自分で試してみる

myFormat フィルタは各文字ごとに大文字にフォーマットします。