欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅析AngularJS Filter用法

程序员文章站 2023-08-27 18:57:31
系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter。如果对smarty比较熟悉的话,学习angu...

系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter。如果对smarty比较熟悉的话,学习angularjs会比较容易一点,这篇文章给大家介绍angularjs filter用法详解,感兴趣的朋友一起学习吧

filter简介

filter是用来格式化数据用的。

filter的基本原型( ‘|' 类似于linux中的管道模式):

复制代码 代码如下:

{{ expression | filter }}

filter可以被链式使用(即连续使用多个filter):

复制代码 代码如下:

{{ expression | filter1 | filter2 | ... }}

filter也可以指定多个参数:

复制代码 代码如下:

{{ expression | filter:argument1:argument2:... }}

angularjs内建的filter

angularjs内建了一些常用的filter,我们一一来看一下。

currencyfilter(currency):

用途:格式化货币

方法原型:

复制代码 代码如下:

function(amount, currencysymbol, fractionsize)

用法:

 {{  | currency}}  <!--将格式化为货币,默认单位符号为 '$', 小数默认位-->
 {{ . | currency:'¥'}} <!--将.格式化为货币,使用自定义单位符号为 '¥', 小数默认位-->
 {{ . | currency:'chy¥':}} <!--将.格式化为货币,使用自定义单位符号为 'chy¥', 小数指定位, 会执行四舍五入操作 -->
 {{ . | currency:undefined:0}} <!--将12.55格式化为货币, 不改变单位符号, 小数部分将四舍五入 -->

datefilter(date):

用途:格式化日期

方法原型:

复制代码 代码如下:

function(date, format, timezone)

用法:

<!--使用iso标准日期格式 -->
{{ '2015-05-20t03:56:16.887z' | date:"mm/dd/yyyy @ h:mma"}}
<!--使用13位(单位:毫秒)时间戳 -->
{{ 1432075948123 | date:"mm/dd/yyyy @ h:mma"}}
<!--指定timezone为utc -->
{{ 1432075948123 | date:"mm/dd/yyyy @ h:mma":"utc"}}

filterfilter(filter):

用途:过滤数组

方法原型:

复制代码 代码如下:

function(array, expression, comparator)

用法1(参数expression使用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(参数expression使用function):

 // 先在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(参数expression使用object):

 <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(指定comparator为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(指定comparator为function):

// 先在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>

jsonfilter(json):

方法原型:

复制代码 代码如下:

function(object, spacing)

用法(将对象格式化成标准的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非常方便的使数据能按我们的要求进行展示,从而使页面变得更生动。