vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > v-model中使用过滤器

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)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文