最近项目中有一个需求,所有的文本输入框需要过滤掉表情符号,但是觉得每次表单验证的时候去判断,有点麻烦。于是我想到了自定义一个指令,后续遇到需要删除表情符号的输入框,直接通过指令将表情符号删除就好了,方便快捷!

一、首先看看Vue自定义指令文档

https://cn.vuejs.org/v2/guide/custom-directive.html

二、在项目的directive中自定义一个指令:noEmoji

  这里需要用到的是对传入的binding的参数进行dom操作,将组件中的vue实例传入,改变vue实例中data的值

import Vue from 'vue';
import { Message } from 'element-ui' // 过滤输入框表情
Vue.directive('noEmoji', {
bind: function (el) {
console.log(el, 'bind')
},
inserted: function (el) {
console.log(el, 'inserted')
},
update: function clearEmoji(el, binding, vnode, oldVnode) {
let emojiRegex = require('emoji-regex')
let regex = emojiRegex()
let match = regex.exec(el.value)
if(match) {
Message('此输入框不支持表情')
el.value = el.value.replace(match[0], "")
if (binding && binding.value) {
let vm = binding.value.vm
let attr = binding.value.attr
let length = attr.length
switch (length) {
case 1:
vm.$set(vm, attr[0], el.value);
break;
case 2:
vm.$set(vm[attr[0]], attr[1], el.value);
break;
default:
return false
}
}
clearEmoji(el)
}
},
componentUpdated: function(el, binding, vnode, oldVnode) {
console.log(el, 'componentUpdated')
},
unbind: function(el, binding, vnode, oldVnode) {
console.log(el, 'unbind')
},
})

三、组件中使用指令后,input框中的表情符号会实时删除:

<input v-model="addForm.name" class="el-input__inner"  v-noEmoji="{vm : this, attr: ['addForm','name']}" placeholder="表单名称" />

四、注意点:

  这个指令只支持原生的dom,对于el-input这样的UI组件标签失效,因为自定义指令没有办法改变el-input标签的dom

Vue用递归实现一个消除输入框表情符的自定义directive的更多相关文章

  1. Vue学习笔记【13】——键盘修饰符以及自定义键盘修饰符

    1.x版本中自定义键盘修饰符[了解] Vue.directive('on').keyCodes.f2 = 113; 2.x版本中自定义键盘修饰符 通过Vue.config.keyCodes.名称 = ...

  2. 用Vue.js递归组件构建一个可折叠的树形菜单

    在Vue.js中一个递归组件调用的是其本身,如: Vue.component('recursive-component', {   template: `<!--Invoking myself! ...

  3. H5页面input输入框含有键盘自带的表情符时显示异常

    在做一个关于新闻的评论功能的H5页面时,需求里面要求能够发送表情显示表情,如果使用自定义的表情库,则在评论也还要加载大量的表情符图片,极大的影响加载速度,消耗流量,去看了下别的新闻网页版的评论部分也没 ...

  4. 【Vue.js实战案例】- Vue.js递归组件实现组织架构树和选人功能

    大家好!先上图看看本次案例的整体效果. 浪奔,浪流,万里涛涛江水永不休.如果在jq时代来实这个功能简直有些噩梦了,但是自从前端思想发展到现在的以MVVM为主流的大背景下,来实现一个这样繁杂的功能简直不 ...

  5. 谈谈Vue的递归组件

    2月最后一天,而且还四年一遇,然而本月居然一篇博客没写,有点说不过去.所以,今天就来谈谈Vue的递归组件.我们先来看一个例子: See the Pen 递归组件 by imgss (@imgss) o ...

  6. vue element-ui怎样提炼一个自己写的js当作公共js

    vue element-ui怎样提炼一个自己写的js当作公共js请教一下各位大神,我刚刚触摸vue element-ui几天,写的一个清晰检索的input框,现在需当作项目公共的部分,可遭需的html ...

  7. vue 学前班002(创建一个实例)

    创建一个Vue实例 我们之前说过,Vue是数据驱动视图的,只要model(模型层)的数据改变了,Vue就会帮我们改变视图上显示的内容,不用我们自己去动手写代码更新.那么,它是怎么做到的,我们的代码要怎 ...

  8. 【笔试题】Java 中如何递归显示一个目录下面的所有目录和文件?

    笔试题 Java 中如何递归显示一个目录下面的所有目录和文件? import java.io.File; public class Test { private static void showDir ...

  9. 如何使用Vue.js来搭建一个后台管理系统

    目录 使用的技术 基础但不好版 1.初始化项目 2.实现初始页内容自定义 3.使用路由 原始代码 自建页面 修改路由 4.测试路由跳转 补充 子路由版 嵌套router-view 定义子路由 修改菜单 ...

随机推荐

  1. Python实现Dijkstra算法

    # Dijkstra.狄杰斯特拉 import heapq import math def init_distance(graph, s): distance = {s: 0} for vertex ...

  2. DOM操作的性能优化

    DOM操作的真正问题在于 每次操作都会出发布局的改变.DOM树的修改和渲染. React解决了大面积的DOM操作的性能问题,实现了一个虚拟DOM,即virtual DOM,这个我们一条条讲. 所以关于 ...

  3. Nslookup: command not found error on RHEL/CentOS 7

    Reference: https://unix.stackexchange.com/questions/164210/nslookup-command-not-found-error-on-rhel- ...

  4. jQuery上传文件显示进度条

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script sr ...

  5. Linux高级命令 ==> find、grep、sed、awk

    一.find find命令用来在指定目录下查找文件.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将查找到的子目录和文件全部进行显示. 语法 find path ...

  6. ES安装的相关

    es安装https://www.cnblogs.com/jingping/p/9448099.htmlhttps://blog.csdn.net/zhanyu1/article/details/880 ...

  7. charles修改请求体内容

    charles修改请求体内容 问:什么是请求体?答:客户端向服务端发出的请求简称请求体,请求体中包含有许许多多的参数,每一个参数都有其特定的意义.多一个或者少一个则服务端给你返回的响应体就会不一样 一 ...

  8. JAVA是否适合非科班者自学入行?石油工程专业从培训到JAVA入门自学亲身经历

    如今的我已经过了三十而立的年纪,虽然在三十岁我没有立下任何事业,相反,还在茫茫苦海中挣扎. 但是我并不是没有收获.当然,曾经在我拥有大好青春年华的时候选择了迷茫,以至于当我有所明悟的时候,却已经错过了 ...

  9. 【miscellaneous】单播、广播和多播IP地址

    转自:http://www.cnblogs.com/gaoxing/archive/2012/02/19/2358484.html 除地址类别外,还可根据传输的消息特征将IP地址分为单播.广播或多播. ...

  10. SQL ----- JDBC 用ID查询某条记录

    package demo; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; ...