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的对话框详解与参数
Mar 08 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
Nov 06 Javascript
javascript使用onclick事件改变选中行的颜色
Dec 30 Javascript
jquery中JSON的解析方式
Mar 16 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
Jun 01 Javascript
Bootstrap中CSS的使用方法
Feb 17 Javascript
各式各样的导航条效果css3结合jquery代码实现
Sep 17 Javascript
jQuery动态增减行的实例代码解析(推荐)
Dec 05 Javascript
jQuery访问json文件中数据的方法示例
Jan 28 jQuery
React+TypeScript+webpack4多入口配置详解
Aug 08 Javascript
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 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
php 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
python获取交互式ssh shell的方法
2019/02/14 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
爱游人:Travelliker
2017/09/05 全球购物
巴西购物网站:Estrela10
2018/12/13 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
建筑公司文秘岗位职责
2013/11/29 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
研讨会主持词
2014/04/02 职场文书
小人国观后感
2015/06/11 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
初中思品教学反思
2016/02/20 职场文书
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis