1、过滤器简介
1.1、全局过滤器与局部过滤器
过滤器本质上是一个函数,与自定义指令类似。
全局过滤器
Vue.filter(id, [definition])
局部过滤器
new Vue({
el: '#app',
filters: {
definition(value): {
...
}
}
})
案例:将字符串首字母转换为大写字母的全局过滤器
Vue.filter('capitalize', function (value) {
if (!value) return '';
value = value.toString();
return value.charAt(0).toUpperCase() + value.slice(1);
})
如果换成局部过滤器
let vm = new Vue({
el: '#app',
data: { // 参数定义,字典形式
},
computed: { // 计算属性,多次调用,只计算一次
},
methods: { // 普通方法,多次调用,多次计算
},
filters: { // 过滤器
capitalize(value) {
if (!value) return '';
value = value.toString();
return value.charAt(0).toUpperCase() + value.slice(1);
}
}
})
注意:
- 当全局过滤器和局部过滤器重名,会采用局部过滤器
- 与自定义命令一样,全局过滤器可以在任何 Vue 实例的模板中使用,而局部过滤器只能在该实例绑定的视图中使用
过滤器可以使用在两个地方:
双花括号:{{ 变量 | 过滤器 }}
v-bind 表达式:v-bind:href=“变量 | 过滤器”
2、过滤器的参数
过滤器函数总是接收表达式的值作为第一个参数,过滤器本质上是一个 JS 函数,自然可以接收多个参数。
不建议把过滤器功能做的很复杂,这违背了过滤器的设计初衷,比如:Vue.filter(‘format’, function (value, …params) {…})
实例:为表达式的值添加前后缀的过滤器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<h2>过滤器</h2>
<!-- 输出:vue-filters.js -->
<p>{{ filename | format('vue', suffix) }}</p>
</div>
<script src="VueJs/vue.js"></script>
<script>
Vue.filter('format', function (value, prefix, suffix) {
if (!value) return '';
value = value.toString();
return prefix + "-" + value + "." + suffix;
})
let vm = new Vue({
el: '#app',
data: {
filename: 'filters',
suffix: 'js'
},
computed: { // 计算属性,多次调用,只计算一次
},
methods: { // 普通方法,多次调用,多次计算
},
filters: { // 过滤器
}
})
</script>
</body>
</html>
3、过滤器的串联
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.profile {}
</style>
</head>
<body>
<div id="app">
<h2>过滤器</h2>
<!-- 输出结果:DLROW OLLEH -->
<p>{{ message | uppercase | reverse }}</p>
</div>
<script src="VueJs/vue.js"></script>
<script>
Vue.filter('uppercase', function (value) {
if (!value) return '';
value = value.toString();
return value.toUpperCase();
})
Vue.filter('reverse', function (value) {
if (!value) return '';
value = value.toString();
return value.split('').reverse().join('');
})
let vm = new Vue({
el: '#app',
data: {
message: 'hello world'
},
computed: { // 计算属性,多次调用,只计算一次
},
methods: { // 普通方法,多次调用,多次计算
},
filters: { // 局部过滤器
}
})
</script>
</body>
</html>