我自己封装的全局指令(输入框自动获取焦点)

情况1:对象+install方法

const directiveObj = {
    install(Vue){
        //vue函数相当于import Vue from 'vue'
        console.log(Vue)
        // 全局指令的方法
        Vue.direvtive('fofo',{
            inserter(el){
                //el是原生的div标签
                //往里获取到input
                el.quertSelector('input'.focus())
            }
        })
    }
}

export defaule directiveObj

情况2:导出的函数(不是对象+install方法)(推荐)

// 自动获取焦点
export default function (Vue) {
  Vue.directive('fofo', {
    // 指令所在标签, 插入到真实DOM时, 才触发
    inserted (el) {
      // van-search组件封装一套div里包含input
      // el是原生的div标签
      // 往里获取到input
      // JS触发标签事件, 直接.事件名()\
      if (el.nodeName === 'TEXTAREA' || el.nodeName === 'INPUT') {
        el.focus()
      } else {
        // el不是输入框, 尝试往里查找
        const inp = el.querySelector('input')
        const textA = el.querySelector('textarea')
        if (inp) {
          inp.focus()
        }
        if (textA) {
          textA.focus()
        }
      }
    },
    // 指令所在标签, 发生更新时触发, (例如: display:none隐藏->出现)
    update (el) {
      if (el.nodeName === 'TEXTAREA' || el.nodeName === 'INPUT') {
        el.focus()
      } else {
        // el不是输入框, 尝试往里查找
        const inp = el.querySelector('input')
        const textA = el.querySelector('textarea')
        if (inp) {
          inp.focus()
        }
        if (textA) {
          textA.focus()
        }
      }
    }
  })
}

情况3:main.js全局注册

Vue.directive('fofo', {
  inserted (el) {
    el.querySelector('input').focus()
  }
})

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值