📅  最后修改于: 2023-12-03 14:39:14.420000             🧑  作者: Mango
在 AngularJS 中,筛选器(Filter)用于过滤并转换数据,可以在表达式中通过管道符号(|)来使用它们。AngularJS 默认提供了一些常用的筛选器,同时也可以自定义筛选器来满足特定需求。
用于格式化货币值,将数值转换为货币格式并显示相应符号。
语法:{{ expression | currency : symbol : fractionSize }}
其中,symbol
为货币符号(默认为 "$"),fractionSize
为保留的小数位数(默认为 2)。
示例:
<div ng-app="">
<p>原始值:{{ price }}</p>
<p>默认格式:{{ price | currency }}</p>
<p>自定义格式:{{ price | currency : "¥" : 0 }}</p>
</div>
输出结果:
原始值:100
默认格式:$100.00
自定义格式:¥100
用于格式化日期值,将日期对象或字符串按照指定格式进行格式化。
语法:{{ expression | date : format : timezone }}
其中,format
为日期格式(默认为 "medium",更多选项见下方表格),timezone
为时区(默认使用本地时区)。
| 选项 | 格式 | | -------- | ---------------- | | short | M/d/yy h:mm a | | medium | MMM d, y h:mm:ss | | long | MMMM d, y h:mm:ss a z | | full | EEEE, MMMM d, y h:mm:ss a zzzz | | shortDate | M/d/yy | | mediumDate | MMM d, y | | longDate | MMMM d, y | | fullDate | EEEE, MMMM d, y | | shortTime | h:mm a | | mediumTime | h:mm:ss a |
示例:
<div ng-app="">
<p>原始值:{{ today }}</p>
<p>默认格式:{{ today | date }}</p>
<p>自定义格式:{{ today | date : "yyyy-MM-dd HH:mm:ss" }}</p>
</div>
输出结果:
原始值:2022-01-04T08:44:34.010Z
默认格式:Jan 4, 2022, 5:44:34 PM
自定义格式:2022-01-04 16:44:34
用于过滤数组或对象,返回符合条件的项。
语法:{{ expression | filter : object : comparator }}
其中,object
为过滤条件,可以为对象、字符串或函数,comparator
为可选参数,指定是否精确匹配(默认为 false
)。
示例:
<div ng-app="">
<input type="text" ng-model="search" placeholder="请输入搜索关键字">
<ul>
<li ng-repeat="item in items | filter: search">{{ item }}</li>
</ul>
</div>
输出结果:
请在输入框中输入关键字进行搜索
<ul>
<li>Apple</li>
<li>Banana</li>
<li>Peach</li>
</ul>
将字符串转换为小写字母。
语法:{{ expression | lowercase }}
示例:
<div ng-app="">
<p>原始值:{{ text }}</p>
<p>转换后:{{ text | lowercase }}</p>
</div>
输出结果:
原始值:Hello World!
转换后:hello world!
将字符串转换为大写字母。
语法:{{ expression | uppercase }}
示例:
<div ng-app="">
<p>原始值:{{ text }}</p>
<p>转换后:{{ text | uppercase }}</p>
</div>
输出结果:
原始值:Hello World!
转换后:HELLO WORLD!
用于限制数组或字符串的长度,返回指定数量的项。
语法:{{ expression | limitTo : limit : begin }}
其中,limit
为限制数量,begin
为可选参数,指定从哪一项开始限制(默认为 0
)。
示例:
<div ng-app="">
<p>原始值:{{ text }}</p>
<p>限制 5 个字符后:{{ text | limitTo : 5 }}</p>
<p>从第 6 个字符开始限制:{{ text | limitTo : 5 : 5 }}</p>
</div>
输出结果:
原始值:Hello World!
限制 5 个字符后:Hello
从第 6 个字符开始限制: World
用于格式化数字,将数值按照指定格式进行格式化。
语法:{{ expression | number : fractionSize }}
其中,fractionSize
为保留的小数位数(默认为 2
)。
示例:
<div ng-app="">
<p>原始值:{{ price }}</p>
<p>默认格式:{{ price | number }}</p>
<p>保留一位小数:{{ price | number : 1 }}</p>
<p>不显示小数位:{{ price | number : 0 }}</p>
</div>
输出结果:
原始值:1000
默认格式:1,000.00
保留一位小数:1,000.0
不显示小数位:1,000
用于排序数组,返回按照指定属性或表达式排序后的数组。
语法:{{ expression | orderBy : expression : reverse }}
其中,expression
为排序属性或表达式,reverse
为可选参数,指定是否反转排序(默认为 false
)。
示例:
<div ng-app="">
<select ng-model="order" ng-options="option.value as option.name for option in options">
<option value="">请选择排序方式</option>
</select>
<ul>
<li ng-repeat="item in items | orderBy: order">{{ item }}</li>
</ul>
</div>
输出结果:
请在下拉框中选择排序方式
<ul>
<li>Apple</li>
<li>Banana</li>
<li>Cherry</li>
<li>Orange</li>
<li>Peach</li>
</ul>
除了使用内置过滤器外,也可以自定义过滤器来实现特定的需求。自定义过滤器需要使用 .filter()
方法进行定义,它接受两个参数:过滤器名称和工厂函数。工厂函数返回一个过滤器函数,它可以接受一个输入参数并返回转换后的结果。
示例:
<div ng-app="myApp">
<input type="text" ng-model="text" placeholder="请输入待转换文本">
<p>转换后:{{ text | reverse }}</p>
</div>
<script>
var app = angular.module("myApp", []);
app.filter("reverse", function() {
return function(input) {
return input.split("").reverse().join("");
};
});
</script>
输出结果:
请在输入框中输入待转换文本
转换后:
在上述代码中,我们定义了一个名为 reverse
的自定义过滤器,它接受一个输入参数,将其转换为数组并反转,最后返回反转后的字符串。在模板中,我们可以通过使用 | reverse
来调用该过滤器,并将输入值作为参数传递给它。