AngularJS フィルターの使用法の簡単な分析_AngularJS

WBOY
リリース: 2016-05-16 15:23:11
オリジナル
1213 人が閲覧しました

angularjs を体系的に研究したところ、データ バインディングやフィルターなど、angularjs のいくつかの考え方が PHP モジュール Smarty に非常に似ていることがわかりました。 Smarty に慣れていれば、angularjs を学ぶのが簡単になります。この記事では、angularjs フィルターの詳細な使い方を紹介します。興味のある友達は一緒に学ぶことができます。

フィルターの紹介

フィルターはデータのフォーマットに使用されます。

フィルターの基本プロトタイプ ('|' は Linux のパイプ モードに似ています):

コードをコピーします コードは次のとおりです:
{{ 式 | }}

フィルターはチェーンで使用できます (つまり、複数のフィルターが連続して使用されます):

コードをコピーします コードは次のとおりです:
{{ 式 | フィルタ 2 ... }}

フィルターでは複数のパラメーターを指定することもできます:

コードをコピーします コードは次のとおりです:
{{ 式 | フィルタ:引数 1:引数 2:... }}

AngularJS 組み込みフィルター

AngularJS には一般的に使用されるフィルターがいくつか組み込まれています。それらを 1 つずつ見てみましょう。

currencyFilter(通貨):

目的: 通貨のフォーマット

メソッドのプロトタイプ:

コードをコピーします コードは次のとおりです:
関数(金額、通貨記号、分数サイズ)

使用法:

{{ | 通貨}} {{ | 通貨:'¥'}} {{ | 通貨:'CHY¥':}} > {{ | 通貨:未定義:0}}



dateFilter(日付):

目的: 日付の形式

メソッドのプロトタイプ:

コードをコピーします

コードは次のとおりです: 関数(日付、形式、タイムゾーン)


使用法:

{{ '2015-05-20T03:56:16.887Z' | 日付:"MM/dd/yyyy @ h:mma"}}

{{ 1432075948123 | 日付:"MM/dd/yyyy @ h:mma"}}


{{ 1432075948123 | 日付:"MM/dd/yyyy @ h:mma":"UTC"}}


filterFilter(フィルター):

目的: フィルター配列

メソッドのプロトタイプ:

コードをコピーします

コードは次のとおりです: 関数(配列、式、コンパレータ)


使用法 1 (パラメーター式に String を使用):

 <div ng-init="myArr = [{name:'Tom', age:}, {name:'Tom Senior', age:}, {name:'May', age:}, {name:'Jack', age:}, {name:'Alice', age:}]">
   <!-- 参数expression使用String,将全文搜索关键字 'a' -->
   <div ng-repeat="u in myArr | filter:'a' ">
     <p>Name:{{u.name}}</p>
     <p>Age:{{u.age}}</p>
     <br />
   </div>
 </div>
ログイン後にコピー
使用法 2 (パラメータ式は関数を使用):

 // 先在Controller中定义function: myFilter
 $scope.myFilter = function (item) {
   return item.age === ;
 };
 <div ng-repeat="u in myArr | filter:myFilter ">
   <p>Name:{{u.name}}</p>
   <p>Age:{{u.age}}</p>
   <br />
 </div>
ログイン後にコピー
使用法 3 (パラメーター式にオブジェクトを使用):

 <div ng-init="myArr = [{name:'Tom', age:}, {name:'Tom Senior', age:}, {name:'May', age:}, {name:'Jack', age:}, {name:'Alice', age:}]">
   <div ng-repeat="u in myArr | filter:{age: } ">
     <p>Name:{{u.name}}</p>
     <p>Age:{{u.age}}</p>
     <br />
   </div>
 </div>
ログイン後にコピー
使用法 4 (コンパレーターを true または false として指定):

 <div ng-init="myArr = [{name:'Tom', age:}, {name:'Tom Senior', age:}, {name:'May', age:}, {name:'Jack', age:}, {name:'Alice', age:}]">
   Name:<input ng-model="yourName" />
   <!-- 指定comparator为false或者undefined,即为默认值可不传,将以大小写不敏感的方式匹配任意内容 -->
   <!-- 可以试试把下面代码的comparator为true,true即大小写及内容均需完全匹配 -->
   <div ng-repeat="u in myArr | filter:{name:yourName}:false ">
     <p>Name:{{u.name}}</p>
     <p>Age:{{u.age}}</p>
     <br />
   </div>
 </div>
ログイン後にコピー
使用法 5 (コンパレータを関数として指定):

jsonFilter(json):
// 先在Controller中定义function:myComparator, 此function将能匹配大小写不敏感的内容,但与comparator为false的情况不同的是,comparator必须匹配全文
 $scope.myComparator = function (expected, actual) {
   return angular.equals(expected.toLowerCase(), actual.toLowerCase());
 }
 <div ng-init="myArr = [{name:'Tom', age:}, {name:'Tom Senior', age:}, {name:'May', age:}, {name:'Jack', age:}, {name:'Alice', age:}]">
   Name:<input ng-model="yourName" />
   <div ng-repeat="u in myArr | filter:{name:yourName}:myComparator ">
     <p>Name:{{u.name}}</p>
     <p>Age:{{u.age}}</p>
     <br />
   </div>
 </div>
ログイン後にコピー

メソッドのプロトタイプ:

コードをコピーします

コードは次のとおりです: 関数(オブジェクト、間隔)

用法(将对象格式化成标准的JSON格式):

复制代码 代码如下:

{{ {name:'Jack', age: 21} | json}}

limitToFilter(limitTo):

方法原型:

复制代码 代码如下:

function(input, limit)

用法(选取前N个记录):

 <div ng-init="myArr = [{name:'Tom', age:}, {name:'Tom Senior', age:}, {name:'May', age:}, {name:'Jack', age:}, {name:'Alice', age:}]">
   <div ng-repeat="u in myArr | limitTo:">
     <p>Name:{{u.name}}
     <p>Age:{{u.age}}
   </div>
 </div>
ログイン後にコピー

lowercaseFilter(lowercase)/uppercaseFilter(uppercase):

方法原型:

复制代码 代码如下:

function(string)

用法:

China has joined the {{ "wto" | uppercase }}.
We all need {{ "MONEY" | lowercase }}.
ログイン後にコピー

numberFilter(number):

方法原型:

复制代码 代码如下:

function(number, fractionSize)

用法:

{{ "3456789" | number}}
<br />
{{ true | number}}
<br />
{{ 12345678 | number:1}}
ログイン後にコピー

orderByFilter(orderBy):

方法原型:

复制代码 代码如下:

function(array, sortPredicate, reverseOrder)

用法:

 <div ng-init="myArr = [{name:'Tom', age:, deposit: }, {name:'Tom', age:, deposit: }, {name:'Tom Senior', age:, deposit: }, {name:'May', age:, deposit: }, {name:'Jack', age:, deposit:}, {name:'Alice', age:, deposit: }]">
   <!--deposit前面的'-'表示deposit这列倒叙排序,默认为顺序排序
   参数reverseOrder:true表示结果集倒叙显示-->
   <div ng-repeat="u in myArr | orderBy:['name','-deposit']:true">
     <p>Name:{{u.name}}</p>
     <p>Deposit:{{u.deposit}}</p>
     <p>Age:{{u.age}}</p>
     <br />
   </div>
 </div>
ログイン後にコピー

自定义Filter

和Directive一样,如果内建的Filter不能满足你的需求,你当然可以定义一个专属于你自己的Filter。我们来做一个自己的Filter:capitalize_as_you_want,该Filter会使你输入的字符串中的首字母、指定index位置字母以及指定的字母全部大写。

方法原型:

复制代码 代码如下:

function (input, capitalize_index, specified_char)

完整的示例代码:

<!DOCTYPE>
 <html>
 <head>
   <script src="/Scripts/angular.js"></script>
   <script type="text/javascript">
     (function () {
       var app = angular.module('ngCustomFilterTest', []);
       app.filter('capitalize_as_you_want', function () {
         return function (input, capitalize_index, specified_char) {
           input = input || '';
           var output = '';
           var customCapIndex = capitalize_index || -;
           var specifiedChar = specified_char || '';
           for (var i = ; i < input.length; i++) {
             // 首字母肯定是大写的, 指定的index的字母也大写
             if (i === || i === customCapIndex) {
               output += input[i].toUpperCase();
             }
             else {
               // 指定的字母也大写
               if (specified_char != '' && input[i] === specified_char) {
                 output += input[i].toUpperCase();
               }
               else {
                 output += input[i];
               }
             }
           }
           return output;
         };
       });
     })();
   </script>
 </head>
 <body ng-app="ngCustomFilterTest">
   <input ng-model="yourinput" type="text">
   <br />
   Result: {{ yourinput | capitalize_as_you_want::'b' }}
 </body>
 </html>
ログイン後にコピー

好了,本篇讲了AngularJS中的Filter,看完这篇后,我们可以利用好Filter非常方便的使数据能按我们的要求进行展示,从而使页面变得更生动。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート