v-if、v-show与自定义指令

需求:点击出现输入框自动获取焦点

在这里插入图片描述
本质上就是一个输入框出现,一个输入框隐藏,当时就使用v-show来实现
至于文本框的焦点选中,想着在文本框中上绑定一个ref,接着在开始的文本框中绑定一个点击事件,点击会调用一个函数,在函数中使用nextTick来实现,功能完美实现

问题:尝试使用自定义指令来实现,发现没有办法出现效果

自定义指令的代码:

// 使用自定义指令实现搜索标签的选中
const directiveObj = {
  install (Vue) {
    Vue.directive('fofo', {
      inserted (el) {
        if (el.nodeName === 'TEXTAREA' || el.nodeName === 'INPUT') {
          el.focus()
        } else {
          setTimeout(() => {
            const theInput = el.querySelector('input')
            const theTextArea = el.querySelector('textarea')
            if (theInput) theInput.focus()
            if (theTextArea) theTextArea.focus()
          })
        }
      }
    })
  }
}

但是一直没有办法实现效果

查看代码,将v-show换成v-if就可以实现效果。因为,inserted函数表示当绑定了该指令的元素被插入到dom时候会自动触发,而v-show只是隐藏,所以没有办法触发自定义指令中的函数。还有一种方法就是给自定义指令添加一个update方法,这样使用v-show也能实现效果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值