应用场景
- 为什么使用?
过滤器包含了转换逻辑,这些逻辑可被用于向视图中显示程序中的任何数据。 - 什么时候使用?
过滤器用于在数据被指令处理并显示到视图中之前将其 格式化、转换、以某种方式进行排序。
两种类型的内置过滤器
对单个数据进行操作
number过滤器: 调整小数位数,根据需要进行四舍五入,该过滤器会自动在千分位处插入逗号;使用格式 {{ item.num | number: 0 }},0表示零位小数;
date过滤器: 格式化日期,使用格式 {{ item.data | date: 'yyyy-MM-dd'}}对数据集合进行操作的
limitTo过滤器: 展示规定的数据条数;使用格式 <li ng-repeat="item in items | limitTo: 5"></li>,正数从前往后,负数从后入往前;如果指定了一个大于数组大小的值,过滤器将会返回数组中的所有对象;
orderBy过滤器: 对数组 中的对象进行排序;使用格式 <li ng-repeat="item in items | orderBy: 'price'"></li>;排序字段名称一定要加隐号,如果要倒序排,则只需在字段前面添加 负号 即可
自定义过滤器
- 单参数过滤器(以百分比显示数据为例)
angular.module('app').filter(percent, function() {
return function(value) {
if(value && isNumber.isNumber(value)) {
return value*100 + '%';
}
}
})
- 带参数过滤器(以文本截断为例)
angular.module('app').filter('ellipsis', function() {
return function(value, length) {
if(angular.isString(value) && angular.isNumber(length)) {
return value.slice(0, length) + '...';
}
}
})
- 集合过滤器(以跳过前几条数据显示之后的数据为例)
angular.module('app').filter('skip', function() {
return function(data, count) {
if(angular.isArray(data) && angular.isNumber(count))
{
if(count > data.length || count < 1)
{
return data;
}
else
{
return data.slice(count);
}
}
else
{
return data;
}
}
})
说明:链式调用,这样多个过滤器可以按照顺序对同一数据进行操作。