8.1 介绍

允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示

8.2 优势

1、在Vue中使用过滤器(Filters)来渲染数据是一种很有趣的方式。
2、首先我们要知道,Vue中的过滤器不能替代Vue中的methodscomputed或者watch
3、过滤器不改变真正的data,而只是改变渲染的结果,并返回过滤后的版本。
4、在很多不同的情况下,过滤器都是有用的,比如尽可能保持API响应的干净,并在前端处理数据的格式。
5、在你希望避免重复和连接的情况下,它们也可以有效地封装成可重用代码块背后的所有逻辑。

8.3 过滤器例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>vue</title>
</head>
<body>
<div id="app">
<div>{{ message | capitalize }}</div>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script>
var vm= new Vue({
el: '#app',
data: {
message: 'world'
},
filters: { // 可以有好多的自定义过滤器
capitalize(value) { // 这里的this指向的window
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
});
</script>
</html>

8.4 过滤器串连

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>vue</title>
</head>
<body>
<div id="app">
{{ message | filterA | filterB }}
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script>
var vm= new Vue({
el: '#app',
data: {
message: 'world'
},
filters: { // 可以有好多的自定义过滤器
filterA(value){
return value.split('').reverse().join('');
},
filterB(value){
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
});
</script>
</html>

8.5 过滤器传参

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>vue</title>
</head>
<body>
<div id="app">
{{ message | filterA('hello',hi) }}
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script>
var vm= new Vue({
el: '#app',
data: {
hi:'!',
message: 'world'
},
filters: { // 可以有好多的自定义过滤器
filterA(value1,value2,value3){
return `${value2} ${value1} ${value3}`;
}
}
});
</script>
</html>

这里,filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 ‘hello’ 作为第二个参数,表达式 hi 的值作为第三个参数。