Vue用递归实现一个消除输入框表情符的自定义directive

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

转载于:https://www.cnblogs.com/angelatian/p/11091004.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值