AngularJs学习第八篇 过滤器filter创建


Posted in Javascript onJune 08, 2016

demo

这是整个示例demo

1、filter.js文件

angular.module("exampleApp", [])
.constant("productsUrl", "http://localhost:/products")
.controller("defaultCtrl", function ($scope, $http, productsUrl) {
$http.get(productsUrl).success(function (data) {
$scope.products = data;//直接转成了数组
});
});

这里我把引入的服务作为一个常量,这样写的好处是我便于修改。

对于如何使用$http 服务,请参考我的AngularJs(三) Deployed 使用

<!DOCTYPE html>
<html xmlns="http://www.w.org//xhtml" ng-app="exampleApp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-"/>
<title></title>
<script src="angular.js"></script>
<link href="bootstrap-theme.css" rel="stylesheet" />
<link href="bootstrap.css" rel="stylesheet" />
<script src="filter.js"></script>
</head>
<body ng-controller="defaultCtrl" >
<div class="panel">
<div class="panel-heading">
<h class="btn btn-primary">Products</h>
</div>
<div class="panel-body">
<table class="table table-striped table-condensed">
<thead>
<tr>
<td>Name</td><td>Category</td><td>Price</td><td>expiry</td>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in products">
<td>{{item.name | uppercase}}</td>
<td>{{item.category}}</td>
<td>{{item.price | currency}}</td>
<td>{{item.expiry| number }}</td>
<td>{{item | json}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>

运行的结果:

AngularJs学习第八篇 过滤器filter创建

Use filter

过滤器分为两类:

1、对单个数据的过滤

2、对集合进行操作。

一、 对数据进行操作使用比较简单,如demo上所示,在{{item | currency}} 等,就可以进行格式化。

currency:“f" 就可以是价格过滤成英镑。

单个数据的过滤器 想过滤的数据格式,在过滤器后使用 :在相应的格式字符。

number: 表示数据小数位保留位,

二: 集合过滤,从集合中过滤出一定的数量。

在基本demo中我加入这样:

<div class="panel-heading">
<h class="btn btn-primary">Products</h>
</div>
<div class="panel-body">
Limit:<select ng-model="limitValue" ng-options="p for p in limitRange" ></select>
</div> 
filter.js中加入了:
$http.get(productsUrl).success(function (data) {
$scope.products = data;//直接转成了数组
$scope.limitValue = "";//要是字符串
<span style="background-color: rgb(, , );"> $scope.limitRange = [];
for (var i = ; i <= $scope.products.length; i++) {
$scope.limitRange.push(i.toString());
<span style="background-color: rgb(, , );"> }</span></span>
}); 
 <tr ng-repeat="item in products|limitTo:limitValue">
<td>{{item.name | uppercase}}</td>
<td>{{item.category}}</td>
<td>{{item.price | currency}}</td>
<td>{{item.expiry| number }}</td>
<td>{{item | json}}</td>
</tr> 

<span style="line-height: .; font-family: verdana, Arial, Helvetica, sans-serif; font-size: px; background-color: rgb(, , );"> </span>

在写函数必须写在 success中,因为采用异步获取json数据。

结果:

AngularJs学习第八篇 过滤器filter创建

limit :就可以调节在页面显示的个数。

Create filter

AngularJs有两种过滤器,首先我们可以创建对单个数据进行格式的过滤器,比如:输出的字符串首字母大写。

先说如何定义个过滤器: 过滤器是通过module.filter 创建的,创建的一般格式为:

angular.module("exampleApp")//表示获取一个模块。filter是在模块下创建的。

.filter("labelCase", function () { //接收两个参数,第一个参数表示过滤器的名字,第二个是一个工厂函数

return function (value, reverse) { //返回一个工人函数,对坐相应的过滤处理。第一个参数表示需要进行格式的对象,第二个参数表示配置,按照什么格式。

if(angular.isString(value))
{
var intermediate = reverse ? value.toUpperCase() : value.toLowerCase();
return (reverse ? intermediate[].toLowerCase() : intermediate[].toUpperCase() + intermediate.substr());
}else
{
return value;
}
}
});

这个 是我另写到一个js文件中 的。customFilter.js 不要忘记添加。

<link href="bootstrap.css" rel="stylesheet" />
<script src="filter.js"></script>
<script src="customFilter.js"></script>

 好了现在我来更改下数据:

<td>{{item.name | labelCase:true}}</td>

前面讲过如果需要添加配置信息,书写格式是 过滤器 :option

当然默认的参数也可以不写,就会默认给Null值或者undefined。

结果:

自定义一个对各数据处理的过滤器函数就是这么简单。

2、自定义个集合处理的函数,就像limitTo一样。

angular.module("exampleApp")
.filter("labelCase", function () {
return function (value, reverse) {
if (angular.isString(value)) {
var intermediate = reverse ? value.toUpperCase() : value.toLowerCase();
return (reverse ? intermediate[].toLowerCase() : intermediate[].toUpperCase() + intermediate.substr());
} else {
return value;
}
}
})
.filter("skip", function () {
return function(data,count)
{
if (angular.isArray(data) && angular.isNumber(count)) {
if(data.length<count || count<)
{
return data;
}else
{
return data.slice(count);
}
} else {
return data;
}
}
});

html改的部分:

<tr ng-repeat="item in products | skip: ">

结果:总共是六条数据,有使用了skip过滤器给过掉2条。

AngularJs学习第八篇 过滤器filter创建

在自定义过滤器时,发现有个过滤器已经定义了,我不想重复定义,怎么办,我们还可以利用一创建的过滤器进行创建。

angular.module("exampleApp")
.filter("labelCase", function () {
return function (value, reverse) {
if (angular.isString(value)) {
var intermediate = reverse ? value.toUpperCase() : value.toLowerCase();
return (reverse ? intermediate[].toLowerCase() : intermediate[].toUpperCase() + intermediate.substr());
} else {
return value;
}
}
})
.filter("skip", function () {
return function (data, count) {
if (angular.isArray(data) && angular.isNumber(count)) {
if (data.length < count || count < ) {
return data;
} else {
return data.slice(count);
}
} else {
return data;
}
}
})
.filter("take", function ($filter) {//大家可以看到,我在工厂函数引用了AngularJs的内置服务。
return function (data, skipcount, takecount) {//大家看下我这里传了三个参数?
var skipdata = $filter('skip')(data, skipcount);//这种写法大家是否迷糊了呢?函数式编程。
return $filter("limitTo")(skipdata, takecount);//limitTo是内置的过滤器。
}
});

$filter('skip') 调用的是skip过滤器,因为他返回的是一个函数,所以我们能继续传参。

<tr ng-repeat="item in products | take::">

结果:

AngularJs学习第八篇 过滤器filter创建

过滤器就是这样就已经完成了。是不是很简单。

Javascript 相关文章推荐
Javascript new关键字的玄机 以及其它
Aug 25 Javascript
jQuery 对Select的操作备忘记录
Jul 04 Javascript
推荐10 款 SVG 动画的 JavaScript 库
Mar 24 Javascript
js实现的星星评分功能函数
Dec 09 Javascript
Bootstrap CSS布局之列表
Dec 15 Javascript
JQuery ZTree使用方法详解
Jan 07 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
Jan 24 Javascript
jquery网页加载进度条的实现
Jun 01 jQuery
vue router 通过路由来实现切换头部标题功能
Apr 24 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
Jul 04 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
Dec 16 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
Feb 07 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
Jun 08 #Javascript
jquery模拟多级复选框效果的简单实例
Jun 08 #Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
Jun 08 #Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
Jun 08 #Javascript
Js+Ajax,Get和Post在使用上的区别小结
Jun 08 #Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 #Javascript
JS与Ajax Get和Post在使用上的区别实例详解
Jun 08 #Javascript
You might like
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
PHP数组操作类实例
2015/07/11 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
javascript中的原型链深入理解
2014/02/24 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
pandas重新生成索引的方法
2018/11/06 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
python config文件的读写操作示例
2019/09/27 Python
python 实现逻辑回归
2020/12/30 Python
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
介绍一下Linux中的链接
2016/05/28 面试题
医学护理系毕业生求职信
2013/10/01 职场文书
护理专业推荐信
2013/11/07 职场文书
财务人员个人求职信范文
2013/12/04 职场文书
医院护士的求职信范文
2013/12/26 职场文书
房地产促销活动方案
2014/03/01 职场文书
老师对学生的评语
2014/04/18 职场文书
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
小区文明倡议书
2014/05/16 职场文书
人事任命书范文
2014/06/04 职场文书
医学生求职信
2014/07/01 职场文书
合作协议书范本
2014/10/25 职场文书
2015年教学工作总结
2015/04/02 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL