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)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。