vue自定义指令input获取焦点,及不生效解决办法

全局注册

方式一:

1.新建一个js文件,里面写自定义指令的方法类
2.引入到main.js中,里面注册全局指令
// 第一步
const focusDirective = {
    inserted(el) {
        el.focus();
    },
}

export default focusDirective
// 第二步 main.js中注册指令
import Vue from 'vue';
import focusDirective from './focusDirective';

Vue.directive('focus', focusDirective);

使用 :

<a-input v-focus></a-input>

方式二:

复制代码
1.新建一个js文件,里面写自定义指令的方法类,并注册
2.引入到main.js中
// 第一步
import Vue from 'vue';
const focusDirective = {
    inserted(el) {
        el.focus();
    },
}
Vue.directive('focus', focusDirective)

// 第二步 main.js中注册指令
import './focusDirective';
复制代码

局部注册(指的是单个vue组件内注册)

复制代码
<template>
    <input type="number v-focus></input>
</template>

<script>
export default {
    data() {},
    directives: {
        focus: {
            inserted(el) {
                el.focus();
            }
        }
    }
}
</script>
复制代码
  • directive参数
  • 复制代码
    1、钩子
    // 只调用一次 指令第一次绑定到元素时触发
    bind(el, binding, vnode, oldvnode) {}
    // 被绑定元素插入到父节点时调用
    inserted(el, binding, vnode, oldvnode) {}
    // 组件所在的VNode更新时触发,
    update(el, binding, vnode, oldvnode) {}
    // 指令所在组件的VNode及其子VNode 更新之后触发
    componentUpdated(el, binding, vnode, oldvnode) {}
    // 只调用一次 指定与元素解绑时触发
    unbind(el, bingding, vnode, oldvnode) {}

    2、参数
    el 指的是所绑定的Dom元素
    el.dataset 指的是元素自定义的参数值,可以修改,可以用来和上面的钩子函数之前传递信息

    
    

    bingding 是一个对象
    name: 去掉"v-"及后缀后的名称
    rawName: 自定义的全部名称
    express: 是个字符串,展示指令绑定的值value
    value: 指令绑定的值
    arg: 传给指令的参数,如果没有传给指令参数则不会出现此参数

     

     

     

     

    复制代码

     自动获取焦点不生效分析

  • 经过打断点发现,a-input中通过v-focus进来的el参数并非是input元素,而是父级div元素,代码改成下面就好了
    复制代码
    const focusDirective = {
        inserted (el) {
            if (el.tagName.toLocaleLowerCase() == 'input') {
                el.focus()
            } else {
                if (el.getElementsByTagName('input')) {
                    el.getElementsByTagName('input')[0].focus()
                }
            }
        }
    
    }
    export default focusDirective
    复制代码

     

posted @   Jim-vue  阅读(4128)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示