vue 自定义指令

  • vue 自定义指令
    • 分类
      • 全局指令 Vue.directive()
      • 局部指令 directives
    • vue 自定义指令 钩子函数
  • vue3 自定义指令
    • 分类
      • 全局指令 app.directive()
      • 局部指令 directives
    • vue3 自定义指令 钩子函数

vue 自定义指令

除了Vue提供的内置指令之外,你还可以自定义指令来扩展Vue的行为。

自定义指令可以让你 在DOM元素上添加自定义行为或样式,并且可以重复使用这些行为和样式,从而提高代码的复用性。

Vue中自定义指令有两种方式:全局指令和局部指令。

分类

全局指令 Vue.directive()
局部指令 directives
  1. 全局指令

    全局指令是注册在Vue构造函数上的指令,可以在整个应用程序的任何实例中使用。

    你可以使用Vue.directive()方法来创建全局指令,该方法接受两个参数:指令名称指令选项对象

    例如,下面是一个自定义的v-focus指令,在元素插入到DOM时将焦点设置在该元素上:

    Vue.directive('focus', {inserted: function (el) {el.focus()}
    })
    

    然后在模板中可以像下面这样使用v-focus指令:

    <input v-focus>
    

    注意,在全局指令中,指令名称需要以v-开头

  2. 局部指令

    局部指令是在组件中注册的指令,只能在该组件及其子组件中使用。

    你可以在组件的选项对象中使用directives属性来注册局部指令。

    例如,下面是一个组件的局部指令v-scroll,当用户向下滚动时触发该指令:

    export default {directives: {scroll: {inserted: function (el, binding) {window.addEventListener('scroll', binding.value)},unbind: function (el, binding) {window.removeEventListener('scroll', binding.value)}}},// ...
    }
    

    然后在组件的模板中,可以像下面这样使用v-scroll指令:

    <div v-scroll="handleScroll"><!-- ... -->
    </div>
    

    注意,在局部指令中,指令名称不需要以v-开头

通过自定义指令,你可以根据具体的需求来扩展Vue的功能。

指令的选项对象可以包含多个生命周期函数,例如inserted、bind、update等,你可以根据需要来选择不同的生命周期函数进行处理。

同时,自定义指令也是Vue插件的一种方式,在开发插件时可以使用自定义指令来增强Vue的功能。

vue 自定义指令 钩子函数

在Vue中,自定义指令的选项对象可以包含一些钩子函数,这些钩子函数在指令的不同生命周期阶段被调用。下面是一些常用的钩子函数:

  1. bind:只调用一次,在指令被绑定到元素时调用。可以在这个钩子函数中进行初始的设置、绑定事件监听器等操作。

  2. inserted:在被绑定元素插入到父节点时调用(仅保证父节点存在,但不一定已被插入DOM中)。可以在这个钩子函数中执行元素的插入操作,如设置焦点、添加样式等。

  3. update:在指令所在元素的模板更新时调用,但可能发生在其子元素模板更新之前。比较常见的使用场景是对比指令的绑定值(binding.value)和更新值(binding.oldValue),并根据需要进行相应的操作。

  4. componentUpdated:在指令所在元素的模板及其子元素的模板都更新后调用。可以在这个钩子函数中进行操作,如更新元素状态、调用第三方库的方法等。

  5. unbind:只调用一次,在指令与元素解绑时调用。可以在这个钩子函数中清除绑定的事件监听器、移除样式等。

这些钩子函数可以在自定义指令的选项对象中使用,例如:

Vue.directive('customDirective', {bind: function (el, binding) {// 初始化设置},inserted: function (el, binding) {// 元素插入父节点后的操作},update: function (el, binding) {// 元素模板更新时的操作},componentUpdated: function (el, binding) {// 元素及子元素模板都更新后的操作},unbind: function (el, binding) {// 解绑时的清理操作}
})

在以上的钩子函数中,el参数是指令所绑定的元素,binding参数是一个对象,包含了指令的信息,如value(绑定值)、oldValue(旧的绑定值)、arg(参数)、modifiers(修饰符)等。

通过使用这些钩子函数,你可以在自定义指令的不同生命周期阶段处理相应的逻辑,实现更灵活和强大的指令功能。

vue3 自定义指令

在Vue 3中,自定义指令的方式与Vue 2有所不同。

通过app.directive()方法来创建全局指令,或者在组件的directives选项中注册局部指令。

分类

全局指令 app.directive()
局部指令 directives

下面是Vue 3中自定义指令的示例:

  1. 全局指令:
// main.js
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)app.directive('focus', {mounted(el) {el.focus()}
})app.mount('#app')

然后在模板中使用v-focus指令:

<!-- App.vue -->
<template><input v-focus>
</template>
  1. 局部指令:
// MyComponent.vue
export default {directives: {scroll: {mounted(el, binding) {window.addEventListener('scroll', binding.value)},unmounted(el, binding) {window.removeEventListener('scroll', binding.value)}}},// ...
}

然后在组件的模板中,可以像下面这样使用v-scroll指令:

<!-- MyComponent.vue -->
<template><div v-scroll="handleScroll"><!-- ... --></div>
</template>

在Vue 3中,自定义指令的选项对象中只包含两个钩子函数:mountedunmounted

mounted钩子函数在指令所在元素被挂载到DOM后调用,而unmounted钩子函数在指令所在元素从DOM中卸载后调用。

除了钩子函数外,指令对象还可以使用其他的配置项,如beforeMountupdatedbeforeUnmount等。

但这些配置项在Vue 3中被视为高级选项,并且不建议频繁使用。

通过自定义指令,你可以在Vue 3中扩展元素的行为和样式,并根据需要执行相应的逻辑。

vue3 自定义指令 钩子函数

在Vue 3中,自定义指令可以使用的钩子函数有以下几个:

  1. beforeMount:在指令所在组件挂载之前调用,即在beforeMount生命周期钩子之前调用。

  2. mounted:在指令所在组件挂载到DOM后调用,即在mounted生命周期钩子之后调用。

  3. beforeUpdate:在指令所在组件更新之前调用,即在beforeUpdate生命周期钩子之前调用。

  4. updated:在指令所在组件更新之后调用,即在updated生命周期钩子之后调用。

  5. beforeUnmount:在指令所在组件卸载之前调用,即在beforeUnmount生命周期钩子之前调用。

  6. unmounted:在指令所在组件卸载之后调用,即在unmounted生命周期钩子之后调用。

这些钩子函数可以在自定义指令的选项对象中使用,例如:

import { createApp } from 'vue'const app = createApp()app.directive('customDirective', {beforeMount(el, binding, vnode) {// 指令被绑定到元素之前的操作},mounted(el, binding, vnode) {// 指令被绑定到元素之后的操作},beforeUpdate(el, binding, vnode, prevVnode) {// 组件更新之前的操作},updated(el, binding, vnode, prevVnode) {// 组件更新之后的操作},beforeUnmount(el, binding, vnode) {// 指令被解绑之前的操作},unmounted(el, binding, vnode) {// 指令被解绑之后的操作}
})app.mount('#app')

在以上的钩子函数中,el参数是指令所绑定的元素,binding参数是一个对象,包含了指令的信息,vnode参数是虚拟节点,prevVnode参数是前一个虚拟节点(仅在beforeUpdateupdated钩子函数中可用)。

通过使用这些钩子函数,你可以在自定义指令的不同生命周期阶段处理相应的逻辑,例如在组件挂载前后进行操作、在组件更新前后执行一些特定逻辑等。请根据具体需求选择合适的钩子函数来使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/152564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1281 书的复制

P1281 书的复制 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 书按顺序给k个人&#xff0c;进行抄写&#xff0c;求抄写页数最多的人所用的时间的最小值。最大值最小&#xff0c;考虑二分。 又因为题目要求要尽可能让前面的人少抄写&#xff0c;那么就要求后面的多抄写&…

npm install 下载不下来依赖解决方案

背景 最近在构建 前端自动化部署 的方案中发现了一个问题&#xff0c;就是我在npm install的时候&#xff0c;有时候成功&#xff0c;有时候不成功&#xff0c;而且什么代码也没发生更改&#xff0c;报错也就是那么几个错&#xff0c;所以在此也整理了一下遇到这种情况&#xf…

如何使用 WPF 应用程序连接 FastReport报表

随着期待已久的FastReport WPF的发布&#xff0c;您不再需要使用 FastReport .NET 来处理基于 WPF 的项目。 不久前&#xff0c;在 FastReport .NET 中使用 WPF 还相当不方便。并非一切都进展顺利&#xff1b;连接 FastReport.dll 和许多其他问题存在问题。我们重新思考了该方…

2023年中职“网络安全“—Web 渗透测试①

2023年中职"网络安全"—Web 渗透测试① Web 渗透测试任务环境说明&#xff1a;1.访问地址http://靶机IP/task1&#xff0c;分析页面内容&#xff0c;获取flag值&#xff0c;Flag格式为flag{xxx}&#xff1b;2.访问地址http://靶机IP/task2&#xff0c;访问登录页面。…

element-ui组件输入框之放大镜(搜索图标)

element-ui组件输入框之放大镜(搜索图标 前言一、解决suffix-icon"el-icon-search"绑定事件问题 前言 在使用element-ui组件时想给输入框组件中的放大镜图标也就是搜索图标绑定事件&#xff0c;可以进行如下操作&#xff1a; 一、解决suffix-icon"el-icon-sear…

面试题c/c++--语言基础

一 、语言基础 1.1 指针 野指针&#xff1a;指针指向的位置是不可知的 悬空指针&#xff1a;指针最初指向的内存已经被释放了的一种指针 两种指针都指向无效内存空间&#xff0c; 即不安全不可控 。需要在定义指针后且在使用之前完成初始化或者使用 智能指针来避免 智能指针 智…

获取阿里云Docker镜像加速器

1、阿里云官网&#xff08;www.aliyun.com&#xff09;注册账号 2、打开“控制台首页” 控制台首页地址&#xff1a;https://home.console.aliyun.com/home/dashboard/ProductAndService 3、点击“概览->容器镜像服务 ACR” 4、打开“镜像工具->镜像加速器”页面&#x…

【grafana | clickhouse】实现展示多折线图

说明&#xff1a; 采用的是 Visualizations 的 Time series&#xff0c;使用的 clickhouse 数据源 在工作中遇到了一个需求&#xff0c;写好了代码&#xff0c;需要在grafana上展示在一个项目中所有人的&#xff0c;随时间的代码提交量变化图 目前遇到的问题&#xff1a;展示…

FFmpeg常用命令行讲解及实战一

文章目录 前言一、学习资料参考二、FFmpeg 选项1、主要选项①、主要命令选项②、举例 2、视频选项①、主要命令选项②、举例1&#xff09;提取固定帧2&#xff09;禁止输出视频3&#xff09;指定视频的纵横比 3、音频选项①、主要命令选项②、举例 4、字幕选项①、主要命令选项…

负载均衡简介

负载均衡 负载均衡&#xff08;Load Balance&#xff0c;简称 LB&#xff09;是高并发、高可用系统必不可少的关键组件&#xff0c;目标是 尽力将网络流量平均分发到多个服务器上&#xff0c;以提高系统整体的响应速度和可用性。 负载均衡的分类和OSI模型息息相关&#xff0c…

从服务器端获取人脸数据,在本地检测特征,并将特征发送给服务器

目录 1.定义函数get_database_process&#xff1a; 2.定义函数features_construct&#xff1a; 3.定义函数send_features_data&#xff1a; 4. 定义函数database_features_construct&#xff1a; 5. main 函数 1.定义函数get_database_process&#xff1a; …

【CHI】Ordering保序

本节介绍CHI协议所包含的支持系统保序需求的机制&#xff0c;包括&#xff1a; • Multi-copy atomicity • Completion response and ordering • Completion acknowledgment • Transaction ordering 一、 Multi-copy atomicity CHI协议中所使用的memory model要求为mu…

【面试经典150 | 数学】Pow(x, n)

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;快速幂-递归方法二&#xff1a;快速幂-迭代 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主…

01背包 P1507 NASA的食物计划

P1507 NASA的食物计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 普通01背包状态表示&#xff1a;f(i, j)表示前i件物品放入一个容量为j的背包可以获得的最大价值。 本题类似&#xff0c;f(i, j, k)表示前i件物品放入一个限制为j&#xff0c;且另一个限制为k的背包中可以…

王者荣耀游戏

游戏运行如下&#xff1a; sxt Background package sxt;import java.awt.*; //背景类 public class Background extends GameObject{public Background(GameFrame gameFrame) {super(gameFrame);}Image bg Toolkit.getDefaultToolkit().getImage("C:\\Users\\24465\\D…

原型模式-C++实现

原型模式是一种创建型设计模式&#xff0c;它允许通过克隆现有的对象来生成新的对象&#xff0c;而不是通过实例化新对象。 原型模式同样用于隔离类对象的使用者和具体类型之间的耦合关系&#xff0c;它同样要求这些“异变类”有稳定的接口。 举例&#xff1a; 假设有一个游戏…

5分钟教你轻松搭建Web自动化测试框架

在程序员的世界中&#xff0c;一切重复性的工作&#xff0c;都应该通过程序自动执行。「自动化测试」就是一个最好的例子。 随着互联网应用开发周期越来越短&#xff0c;迭代速度越来越快&#xff0c;只会点点点&#xff0c;不懂开发的手工测试&#xff0c;已经无法满足如今的…

3.8-镜像的发布

如果我们想将image push到docker hub里面&#xff0c;那么我们的image的名字一定要是这种格式&#xff1a;docker hub id/imageName&#xff0c;例如&#xff1a;lvdapiaoliang/hello-docker docker hub个人账户设置地址&#xff1a; 在push之前要先登录&#xff1a; docker l…

数学建模值TOPSIS法及代码

TOPSIS法 TOPSIS法简称为优劣距离解法&#xff0c;是一种常见法综合评价方法&#xff0c;其能充分利用原始数据的信息&#xff0c;其结果能精确地反映各个评价方案之间的差距。 模型介绍 上篇文章谈到的层次分析法是有局限性的。比如评价的决策层不能太多&#xff0c;太多的…

ISP--Black Level Correction(黑电平矫正)

图像的每一个像素点都是由一个光电二极管控制的&#xff0c;由二极管将电信号&#xff0c;转换为数字信号。 那么&#xff0c;我们知道了&#xff0c;图像的像素值是与电信号强度相关的。但是&#xff0c;我们得知道&#xff0c;每一个光电二极管要想工作&#xff0c;都得有一定…