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

摘要:
全局注册方法1:1。创建一个新的js文件,并在其中写入自定义指令的方法类。将其导入main.js并在其中注册全局指令。//步骤1 constfocusDirective={insert(el){el.focus();},}exportdefaultfocusDirective//步骤2:在main.js中注册来自“vue”的指令importVue;importfocusDirectivefrom'。/福库牌手表

全局注册

方式一:

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: 传给指令的参数,如果没有传给指令参数则不会出现此参数

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

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

     自动获取焦点不生效分析

  • 经过打断点发现,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

免责声明:文章转载自《vue自定义指令input获取焦点,及不生效解决办法 Jim》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇最长递增子序列C#DataGridView控件60招(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

小程序表单回显

input中回显: 在需要回显数据的input中添加value属性,并传入需要的数据; 在其它标签中回显: 在测试input,view,text标签后发现,value属性在后两者中没有生效,如果需要回显的数据存在多个选项,可以使用自定义属性来设置和显示; 单个数据可以在JS初始数据data中先设置初始数据 -> 获取需要回显的数据 ->...

sublime text3安装SublimeREPL--解决不能运行input()的问题

原文地址:http://blog.chinaunix.net/uid-12014716-id-4269991.html 一、安装包管理器(如果已经安装可以忽略)1、简单的安装方法:使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码: 点击(此处)折叠或打开 importurllib.request,os;...

python+selenium:解决上传文件&amp;lt;input type='file'&amp;gt;标签属性被css的visibility隐藏导致无法定位元素的问题

要想上传文件,需要找到在HTML中<inputtype="file" />这个标签,有它就可以利用send_keys上传文件,不过这里的<input>元素被隐藏了,导致一直定位不到input html代码如下,注意visibility:hidden,表示这个input元素被隐藏了,要想定位它必须先把隐藏属性去掉 一般控制元素显示或...

NGUI系列教程二

接下来我们创建一个Label,NGUI->Open the Widget Wizard,打开widgetTool对话框,在Template中选择Label,确定AddTo右侧选项为panel,点击,Add To完成Label创建。 1.Label属性窗口如图 1.下面的节奏可能有点快,大家可以先熟悉一下上面讲的流程,再进行下面的学习。接下来我们...

vue 图片下载到本地,图片保存到本地

  必须同源(访问的网站域名与服务器域名一致)才能下载 1 2 3 4 5 6 downs() {   var alink = document.createElement("a");   alink.href = this.shop.shoppic_url;   alink.download = "pic"; //图片名   al...

vue循环遍历 v-for

当我们有一组数据需要进行渲染时,就可以通过v-for来完成 1、遍历数组 <!--在遍历的过程中,没有用到索引值--> <ul> <li v-for="item in names">{{item}}</li> </ul> <!--在遍历的过程中,获取下标值--> <ul&g...