v-model中如何使用过滤器
作者:习惯是一种病
这篇文章主要介绍了v-model中如何使用过滤器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
v-model中使用过滤器
v-model不能使用过滤器(filter)的替代或者解决方法;
如图:
页面中有v-model需要在输入时验证格式的时候(<input v-model='price' />)

官方给出的方法是使用computed,但是多个框时computed不能很好的复用;
使用input事件,通过传值验证输入框中的内容,
直接上代码:
<input v-model="price" @input="priceFormat('price',price)"/>
data(){
return {
price:'',//价钱
}
},
methods: {
/*价格过滤
*data:对应data中的名称,是字符串,val:对应data中的值
*/
priceFormat(data,val){
if(!/^\d*?\.?\d*?$/.test(val)){
this[data]='';//修改data中的价钱为空
}
}
}v-model或者v-text中使用过滤器进行脱敏不生效问题
vue.js允许我们自定义过滤器,可以用来处理一些常用的文本格式化,但是过滤器只能用在两个地方,双括弧插值({{}})和v-bind 表达式(后者聪vue2.1.0+才开始支持),并且filter应该被定义在js表达式的尾部,通常放在vue框架的methods下面;
但是有时候我们需要在v-model/v-text中使用脱敏,这里分别提供两种方法:
1.使用v-model进行过滤器脱敏
<template>
<div id="app">
<input type="text" v-model="userDate" />
<span>{{ userDate | dateFormat }}</span>
</div>
</template>其中,v-model用来进行双向绑定,下面的双括弧用来进行脱敏显示;
2.手动将关键部位进行截取加*脱敏
<div class="cuzu" v-show="cuzu"> <div class="formName formSlect"> <h1>出租人姓名</h1> <input type="text" id="lessorName" v-model="Tname" disabled="disabled"> <div class="clearFix"></div> </div> <div class="formName formSlect"> <h1>出租人证件号</h1> <input type="text" id="lessorCode" v-model="Tidcard" disabled="disabled"> <div class="clearFix"></div> </div> </div>
//这里用来传递实参运算
_this.name = res.userdetail.name;
_this.idcard = res.userdetail.papersnumber;
//身份证脱敏处理
info.Tidcard = res.userdetail.papersnumber.substring(0, 1) + "****************" + res.userdetail.papersnumber.substring(17, 18);
//姓名脱敏处理
info.Tname = "*" + res.userdetail.name.slice(1);这里v-model拿到后台截取加*后的参数进行脱敏展示。
获取到用户信息后对名字(2/3/4个字)进行脱敏
_this.name = res.userdetail.name;
if (_this.name.length == 2) {
_this.yhmc = _this.name.slice(0, 1) + "*";
} else if (_this.name.length == 3) {
_this.yhmc = _this.name.slice(0, 1) + "**";
}
else {
_this.yhmc = _this.name.slice(0, 1) + "***";
}3.定义一个方法进行脱敏处理
changeCardid: function (value) {
if (!value) return ''
//return value.replace(/(\w{3})\w*(\w{4})/, '$1******$2')
return value.replace(/(\w{1})\w*(\w{1})/, '$1****************$2')
},
changeName: function (value) {
if (!value) return ''
else {
if (value.length == 3) {
return value.substr(0, 1) + "**"
} else if (value.length == 2) {
return value.substr(0, 1) + "*"
} else {
return value.substr(0, 1) + "***"
}
}
}然后在v-model中直接调用我们声明的脱敏方法,changeName(name)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
