【Vue.js 入门与实战】--指令-自定义全局指令让文本框获取焦点

简介: 指令-自定义全局指令让文本框获取焦点

指令-自定义全局指令让文本框获取焦点

 

目录

一、具体方法

二、定义指令

三、总结

 

 

一、具体方法

提供了两种方式自定修饰符


1.x中自定义键盘修饰符【了解即可】

Vue.directive('on’).keyCodes,f2 = 113;

 

2.x中自定义键盘修饰符

通过Vue config,keycodes.名称=按键值来自定义案件修饰符的别名:

Vue.config.keycodes.f2=113;

使用自定义的按健修饰符:

<input type="text”v-model="name @keyup.f2="add">


第一种方法已经不适用,所以主要学习第二种方法。

 

让文本框获取焦点的方法:

可以使用 focus ,只需要获取到 DOM 元素,有一个 js 原生方法为:.focus

演示:

<input type=”text”class =”form-control”v-model=”keywords”id=”search”>

Document.getElementById(“search”).focus

vis code ”.”出的淡蓝色的长方体图标表示属性,紫色的立方体图标表示方法。

 

如下图所示:

image.png

.Focus是一个方法,可以使文本框获得焦点,但是 vue 不提倡这样的做法,所以要通过自定义指令来获取焦点。

 

@keyup,v-model等都属于自定义指令,它们都是由 vue 提供的内置指令。

 

 

二、定义指令

<input type=”text”class =”form-control”v-model=”keywords”id=”search”v-focus>

给文本框加上v-focus 属性,刷新页面,文本框就会获得焦点。

但是Vue 未提供这个指令,所以需要自己定义。

注意:


Vue中所有的指令,在调用时,都必须以 v- 开头。

Vue.directive(‘focus’,{})//全局的过滤器不加S,私有过滤器加S,这里是全局的过滤器,不需要带 s

 

使用 Vue.directive ()定义全局的指令 v-focus

其中:参数1为指令的名称,注意:在定义时,指令的名称前面,不需要加v-前缀,但是,在调用时,必须在指令名称前加上 v-前缀进行调用。

参数2是一个对象,这个对象上,有一些指令相关的函数,这些函数可以在特定的阶段,执行相关的操作。

 

其中包括:

  • bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。


  • Inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document )
  • update:所在组件的VNode 更新时调用,但是可能发生在其孩子的 VNode 更新之前。指令的值可能发生了改变也可能没有。可以通过比较更新前后的值来忽略不必要的模板更新

 

  • oonentUpdated:所在组件的VNode及其孩子的VNode全部更新时调用。
  • unbind :只调用一次,指令与元素解绑时调用。

 bind:function(el)//每当指令绑定到元素上时,会立即执行这个bind 函数,只执行一次。因为一个指令交给一个元素绑定只能绑定一次,所以只执行一次。


bind 中只要把指令交给元素,就会立即执行。el 参数表示把指令绑定给哪个元素,el就是那个元素。


注意:

在每个函数中,第一个参数,永远是e1,表示被绑定了指令的元素,e1 参数是一个原生的 Js 对象,就是一个 DOM 对象。以上通过 focus 指令通过 v- 的形式应用给 input


el就代表 input 的原生的一个 js 对象,input上有.focus 方法。把指令绑定给文本框就会立即调用bind


再使 el 调用 focus 获取焦点是失败的,原因是执行时机不对,bind 的执行时机是指令绑定到元素上时,会立即执行,此时元素还未插入到 DOM 中去。


如果一个文本框或者超链接要显示就必须经过浏览器的渲染解析。解析好的元素先放入内存中的 DOM 树中,如果没有放到 DOM 树中,就只属于内存中,不能获取焦点。

只有放在页面上才能获取焦点。在 bind 中,元素刚绑定了指令,还没有插入到 DOM 中,这时,调用 focus 方法没有作用。因为一个元素只有插入 DOM 之后,才能获取焦点。

}

 

inserted:function(el)

el.focus()//inserted表示元素插入到 DOM 中时,会执行 insezted 函数【触发1次】。

Focus 的特点是,如果获取焦点,元素必须插入到 DOM 中。在这三个事件中,只有 inserted 执行完后,元素才被插入 Dom 中。

}

Updated:function(el)

el.focus()//当 VNode 更新时,会执行 updated ,可能会触发多次。

 

}<input type = “text”class=”form-control”v-model=”keywords”i=”search”v-focus>

 

演示效果:

image.png

 

三、总结

通过 Vue.directive ()定义全局的指令,参数1为指令的名称,不需要加v-前缀,在调用时,必须在指令名称前 加上 v-前缀进行调用。

参数2是一个对象,这个对象上,有三个比较主要的方法,bind inserted updated,它们的第一个参数一直都是被绑定指令的元素,是一个原生的 js DOM 对象。


在每一个函数内部可以执行相关的方法操纵 DOM 元素。

 

三个函数的不同:

执行时期不一样,bind 是指令绑定给元素就立即执行,此时,元素还未插入到 DOM 中,inserted 是元素插入到 DOM 中后,就会执行,updated 是当 DOM 节点更新时,就会立即执行。

相关文章
|
25天前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
179 2
|
16天前
|
JavaScript
Vue 指令速查表
【10月更文挑战第12天】Vue 指令速查表
|
5天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
5天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
13天前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
40 10
|
11天前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
28天前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
27天前
|
JavaScript 开发者
vue指令的开发看这篇文章就够了!超详细,赶快收藏!
【10月更文挑战第8天】vue指令的开发看这篇文章就够了!超详细,赶快收藏!
vue指令的开发看这篇文章就够了!超详细,赶快收藏!
|
14天前
|
JavaScript UED
"Vue实战技巧大揭秘:一招解决路由跳转页面不回顶部难题,让你的单页面应用用户体验飙升!"
【10月更文挑战第23天】在Vue单页面应用中,点击路由跳转时,默认情况下页面不会自动滚动到顶部,这可能影响用户体验。本文通过一个新闻网站的案例,介绍了如何使用Vue-router的全局前置守卫和`scrollBehavior`方法,实现路由跳转时页面自动滚动到顶部的功能,提升用户浏览体验。
50 0
|
16天前
|
JavaScript 前端开发 C#
从入门到放弃,我们为何从 Blazor 回到 Vue
【10月更文挑战第29天】在前端开发中,许多开发者从尝试新技术 Blazor 最终回到熟悉的 Vue。主要原因包括:1) Blazor 学习曲线陡峭,Vue 上手容易;2) Vue 开发工具成熟,开发效率高;3) Vue 性能优异,优化简单;4) Vue 社区庞大,生态丰富;5) 项目需求和团队协作更适配 Vue。选择技术栈需综合考虑多方面因素。