过滤器的定义?
vue filters过滤器是vue中用来处理文本格式化的工具。可以对数据进行处理,规范项目的一些数据的特定格式。
过滤器的原理?
Vue的过滤器的实现参考了linux的shell命令的管道的实现原理,即上一个命令的输出是下一个命令的输入,
过滤器的作用?
作用是处理一些常见的文本格式化,
过滤器的使用场景 / 使用方法?
使用方法:
过滤器可以用在两个地方:
1. 双花括号插值
2. v-bind表达式。
/* 在双花括号中 */
{{ message | capitalize }}
/* 在 `v-bind` 中 */
<div v-bind:id="rawId | formatId"></div>
1,用户可以在组件中自定义过滤器。局部过滤器
var vm = new Vue({
el:"#app",
data:{
totalMoney:0,
productList:[]
},
filters:{
formatMoney:function(value){
return "¥"+value.toFixed(2)
}
},
...
}
<div class="cart-tab-2">
//应用自定义局部过滤器
<div class="item-price">{{item.productPrice | formatMoney}}</div>
</div>
2,或者在创建Vue实例之前全局定义过滤器:
Vue.filter("money",function(value,type){
return "¥"+value.toFixed(2)+type;
})
new Vue({
// ...
})
<div class="cart-tab-4">
//应用全局过滤器
<div class="item-price-total">{{item.productPrice*item.productQuantity | money('元')}}</div>
</div>
当全局过滤器和局部过滤器重名时,会采用局部过滤器。
使用场景:
1,处理一些文本格式化
。比如规定日期格式,规定价格格式【处理数据添加美元符号等】。
例如一个购物车界面,读取json文件获取购物车内物品的相关信息。对于单价的变量,读取后需要加美元符号或者加小数点,可以使用过滤器
2,封装项目中的一些全局方法
。项目中的一些全局方法,比如对数据作四舍五入取值的方法,比如遍历数据等一些工具方法,常常在许多地方都需要使用。需要将这些方法作为全局方法。可以通过vue.prototype
, mixins
在main.js文件中封装全局方法。但维护性和可读性差。可以通过全局定义过滤器来达到同样的效果。
知识强化。使用过滤器的 优缺点 / 注意事项,防踩坑
过滤器可以串联:
1,
{{ message | filterA | filterB }}
如上所示,filterA被定义为接收单个参数的过滤器函数,表达式message的值将作为参数传入到函数中。然后继续调用同样被定义为接收单个参数的过滤器filterB,将filterA的结果传递到filterB中。
2,
{{ message | filterA('arg1', arg2) }}
如上所示,filterA被定义为接收三个参数的过滤器函数。其中message的值作为第一个参数,普通字符串’arg1’作为第二个参数,表达式arg2的值作为第三个参数。
知识扩展:
1,vue.prototype
在main.js入口文件中将方法挂载到vue.prototype实现全局封装,如我们封装一个获取时间戳的函数。
Vue.prototype.now = Date.now || function () {
return new Date().getTime();
};
在.vue文件中通过this.调用
<script>
export default {
mounted(){
console.log('now:' + this.now());
},
}
</script>
2, mixins
在main.js文件中注入。
mixins的全局注入规则:如果组件中没有这个getTime方法,那么就会在页面中注入这个方法。
Vue.mixin({
data() {},
methods: {
getTime() {
return new Date().getTime();
}
}
});
new App({
el: '#app'
// ...
});