• (详解)Vue自定义指令


    一、背景

    在我们日常开发中,会遇到特殊的操作例如,图片懒加载,和类似v-model等等这样的自定义指令

     二、提前预习(必看)

    自定义指令跟组件一样,也是有生命周期的,我们的操作都是定义在对应的生命周期中,然后进行操作的,然后通过钩子函数传参进行绑定事件等等(先了解下)

    2.1自定义指令生命周期

    • created:在绑定元素的 attribute 或事件监听器被应用之前调用;
    • beforeMount:当指令第一次绑定到元素并且在挂载父组件之前调用;
    • mounted:在绑定元素的父组件被挂载后调用,大部分自定义指令都写在这里;
    • beforeUpdate:在更新包含组件的 VNode 之前调用;
    • updated:在包含组件的 VNode 及其子组件的 VNode 更新后调用;
    • beforeUnmount:在卸载绑定元素的父组件之前调用;
    • unmounted:当指令与元素解除绑定且父组件已卸载时,只调用一次;
       

    2.2 生命周期四个参数

    这里七个钩子函数,钩子函数中有回调参数,回调参数有四个,含义基本上和 Vue2 一致:

    • el:指令所绑定的元素,可以用来直接操作 DOM(可以进行事件绑定)。

    • binding:我们通过自定义指令传递的各种参数

    • vnode:Vue 编译生成的虚拟节点。

    • oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

    三、 自定义指令

    3.1私有自定义指令

    3.1.1定义指令

    在每个 vue 组件中,可以在 directives 节点下声明私有自定义指令。示例代码如下:

    1. <script>
    2. export default {
    3. directives: {
    4. // 自定义私有指令focus,在使用的时候要用 v-focus 。
    5. focus: {
    6. mounted(el, binding, vnode) => {
    7. //el是对应的dom,可以通过el给对应添加事件监听 el.addEventListener
    8. // binding.value 就是通过 = 绑定的值,在传值的时候传到这 binding.value
    9. //vnode是节点
    10. }
    11. },
    12. },
    13. }
    14. </script>

    3.1.2使用自定义指令

    在使用自定义指令时,需要加上 v- 前缀。示例代码如下:

    1. <input v-focus/>

    3.2全局自定义指令

    3.2.1定义指令

    全局共享的自定义指令需要通过“单页面应用程序的实例对象”进行声明,示例代码如下:

    1. import { createApp } from 'vue'
    2. const app = createApp({
    3. /* ... */
    4. })
    5. // 注册(对象形式的指令)
    6. app.directive('my-directive', {
    7. /* 自定义指令钩子 */
    8. mounted(el, bindings) {
    9. }
    10. })
    11. // 注册(函数形式的指令)
    12. app.directive('my-directive', (el, binding, vnode) => {
    13. //el是对应的dom,可以通过el给对应添加事件监听 el.addEventListener
    14. // binding.value 就是通过 = 绑定的值,在传值的时候传到这 binding.value
    15. //vnode是节点
    16. })

    3.2.2使用自定义指令

    在使用自定义指令时,需要加上 v- 前缀。示例代码如下:

    1. <input v-focus/>

  • 相关阅读:
    N32学习笔记1-工程模板建立
    工业级芯片可靠性试验项目&条件
    Linux 三剑客grep sed 与 awk
    acwing KMP算法java版实现
    HarmonyOS 学习方法
    中级 PHP 程序员应该掌握的面试题
    jbase打印导出实现
    云原生之旅 - 12)使用 Kaniko 在 Kubernetes上构建 Docker 容器镜像
    treectrl类封装 2023/8/13 下午4:07:35
    C++PrimerPlus(第6版)中文版:Chapter14.2私有继承use_stui
  • 原文地址:https://blog.csdn.net/m0_55333789/article/details/132752112