Vue2自定义指令改变DOM值后未刷新data中绑定属性的值
标签(空格分隔): Vue
自定义指令用于过滤输入框,只允许输入数字:
Vue.directive('numberOnly', {
bind: function (el, binding) {
el.handler = function () {
el.value = el.value.replace(/[^\d]/g, '');
}
el.addEventListener('input', el.handler);
},
unbind: function (el) {
el.removeEventListener('input', el.handler);
}
});
在DOM中使用如下所示:
<input type="text" name="image-code" class="input" placeholder="图片验证码" autocomplete="off" v-model="imageCode" v-number-only />
此时可以实现在输入框中只能输入数字,输入其它字符不予显示。但是在提交表单的时候使用this.imageCode却发现,字符中有一个刚才试验的非数字字符,如图所示:

这该怎么办呢?通过阅读文档,我目前使用传递自定义指令value属性的方法来为data中的属性赋值。使用这个方法,可以不绑定v-mode="",当然绑定了也没什么区别:
Vue.directive('numberOnly', {
bind: function (el, binding) {
el.handler = function () {
el.value = el.value.replace(/[^\d]/g, '');
// 手动刷新data中绑定的属性
binding.value.set[binding.value.name] = el.value;
}
el.addEventListener('input', el.handler);
},
unbind: function (el) {
el.removeEventListener('input', el.handler);
}
});
此时在DOM中就需要传递两个属性:
<input type="text" name="image-code" class="input" placeholder="图片验证码" autocomplete="off" v-model="imageCode" v-number-only="{ set: this, name: 'imageCode' }" />
这样this.imageCode当中就不会出现非数字字符串了。
你可能想说,直接在set中指定this.imageCode,然后在自定义指令中binding.value.set = el.value;,不就可以了嘛。然而经过测试这样是起不到作用的。
这个方案并不优雅,如果有其它解决方案,还望不吝赐教。
Vue2自定义指令改变DOM值后未刷新data中绑定属性的值的更多相关文章
- 【spring boot logback】日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么
本篇 将针对[日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么]这一个主题进行探索. 这个测试项目是根据[spr ...
- ajax取到数据后如何拿到data.data中的属性值
今天遇到的ajax取到数据后如何拿到data.data中的属性值的问题 比如拿到了数据 我要取出data中的name 题外话:当然取名最好别取什么奇怪的xiaobi
- 关于提交表单时添加自定义值的方式:data中值可绑定function
表单提交时新增自定义值: $.ajaxForm(){ data:{aaa:"12"} } 但是这个是在初始化的时候就绑定进去的,所以值是固定的初始化时候的值,若想添加动态值,可以这 ...
- 学习旧岛小程序 (5) observer 函数中修改属性的值
不要在一个属性的 observer 函数中修改属性的值 不然会造成内存泄露 错误代码: properties: { /* 期刊号 */ index: { type: String, observer ...
- 微信小程序:给data中对象中的属性设置值与给data中的属性或对象或数组设置值的区别
一.给data中的属性或对象或数组设置值,属性名不需要加引号 this.setData({ material: param, // 这里material为对象 } this.setData({ d ...
- Vue自定义指令获取DOM元素
我们知道,Vue.js的核心是数据驱动,当数据有所变化时,DOM就会被更新,比如: <span v-text="msg"></span> export de ...
- angular中关于自定义指令——repeat渲染完成后执行动作
业务中有时需要在异步获取数据并用ng-repeat遍历渲染完页面后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己动手写.有经验的同学都应该知道,在ng-r ...
- vue2自定义指令-加载指令v-loading和占位图指令v-showimg
了解自定义指令的钩子函数 bind(){}:每当指令绑定到元素上的时候,就会立刻执行bind这个函数.只调用一次. 和css相关的操作,可以放在这个钩子函数中. inserted(){}:元素插入到D ...
- 在jsp中用一数组存储了数据库表中某一字段的值,然后在页面中输出其中的值。
List<String> list = new ArrayList<String>(); String sql = "select userName from us ...
随机推荐
- HDU - 1285-确定比赛名次(拓扑排序+优先队列)
有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道 ...
- TCP/IP协议分为哪四层,具体作用是什么。
TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP).文件传输协议(FTP).网络远 ...
- Python中将列表转化成矩阵表示
list1 = [] a = [1,3,4] b = [2,5,6] list1.append(a) list1.append(b) arr = np.array(list1) # 打印arr pri ...
- python_面向对象—代码练习
"""注意:代码切勿照搬,错误请留言指出""" import re ''' class Person: name='xxx' age=20 ...
- mysql 学习之 DDl语句
mysql 1,登入mysq1: mysql -uroot -p ---->密码隐藏登入好点 2,mysql操作: 创建数据库:create databases test1; 查看数据库:sh ...
- 搭建基于Ubuntu的开发环境
基于ubuntu 16.04 LTS经验 分区方案 内存:4G,硬盘:500G 分区 大小 说明 备注 / 20G 说明 swap 6G 说明 /tmp 15G 临时文件 /var 40G 可变数据目 ...
- mac上k8s学习踩坑
本文学习k8s参考内容:http://docs.kubernetes.org.cn/126.html,学习过程中遇到一些坑,记录如下: -------------------------------- ...
- 下载Dubbo源码后的编译安装启动
1:安装jdk,maven 配制环境变量: 2:安装zookeeper 配制zookeeper环境变量 3:把dubbo源码编译成war包 启动cmd黑窗口 ,进入 源码文件 ...
- Nginx启动关闭和重启、文档直接下载不阅览
nginx启动相关 启动:sbin/nginx -c conf/nginx.conf 关闭:sbin/nginx -s stop 重启(重新加载配置文件):sbin/nginx -s reload 检 ...
- VS2010中VC++目录和C/C++之间的区别。VC++ Directories和C/C++的区别。
首先,这是个历史遗留问题,说起来比较复杂.其次,这个问题在微软的MSDN博客上已经专门被说起过了,英文好的请直接移步到原文:<VC++ Directories>.另外,stack over ...