HuKai's Blog HuKai's Blog
首页
  • Java核心技术

    • Java基础
    • Java并发编程
    • JVM
    • Java新特性
  • Spring生态

    • Spring5
    • SpringMVC
    • SpringBoot
  • 开源框架

    • MyBatis
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
  • 页面样式

    • HTML
    • CSS
  • JavaScript

    • JavaScript基础
    • ECMAScript6教程
    • TypeScript
  • 前端框架

    • Vue
    • Webpack
  • NIO
  • Netty
  • RabbitMQ
  • 技术文档

    • GitHub技巧
    • 博客搭建
    • 技术笔记
  • 优质文章

    • 小技巧
    • 解决方案
GitHub (opens new window)

HuKai

梦想成为全栈的保安
首页
  • Java核心技术

    • Java基础
    • Java并发编程
    • JVM
    • Java新特性
  • Spring生态

    • Spring5
    • SpringMVC
    • SpringBoot
  • 开源框架

    • MyBatis
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
  • 页面样式

    • HTML
    • CSS
  • JavaScript

    • JavaScript基础
    • ECMAScript6教程
    • TypeScript
  • 前端框架

    • Vue
    • Webpack
  • NIO
  • Netty
  • RabbitMQ
  • 技术文档

    • GitHub技巧
    • 博客搭建
    • 技术笔记
  • 优质文章

    • 小技巧
    • 解决方案
GitHub (opens new window)
  • HTML

  • CSS

  • JavaScript基础

  • ECMAScript

  • TypeScript

  • Vue

    • Vue基础

      • 初识Vue
      • 模板语法 - 插值语法 - 指令语法
      • 计算属性和监听属性
      • 样式绑定 - class - style
      • 列表渲染v-for
      • 事件处理v-on
      • 表单输入绑定
      • 生命周期钩子
      • 过滤器filter
      • 常用内置指令
      • 自定义指令
        • 自定义全局指令
        • 自定义局部指令
        • 钩子函数
    • Vue组件化编程

    • Vue脚手架

    • Vue插件

  • Webpack

  • 前端
  • Vue
  • Vue基础
HuKai
2022-02-24
目录

自定义指令

在 Vue,除了核心功能默认内置的指令 ( v-model 和 v-show ),Vue 也允许注册自定义指令。它的作用价值在于当开发人员在某些场景下需要对普通 DOM 元素进行操作。

官方文档:自定义指令 — Vue.js (vuejs.org) (opens new window)

# 自定义全局指令

/* 通过在全局Vue对象上调用directive方法
格式
Vue.directive("指令名称", {
    生命周期钩子函数名称: function (el, obj) {
        // el:被绑定的元素
        // obj:指令被绑定时,传递的参数
    }
})

0.自定义全局指定可以被任何一个Vue实例挂载的模板使用
1.在定义的时候,指令名称不需要添加v- 
2.指令需要挂载到vue的生命周期钩子函数上,所以在自定指令的时候需要确定在该生命周期能获取在需要的元素
3.生命周期详解
bind:只调用一次,指令第一次绑定到元素时调用,在这里可以进行一次性的初始化设置
inserted:被绑定元素插入父节点时调用
... */

Vue.directive("color", {
    bind: function (el, obj) {
        el.style.color = obj.value
    }
})
Vue.directive("focus", {
    inserted: function (el) {
        el.focus();
    }
})
let vue = new Vue({
    el: '#app',
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<div id="app">
    <p v-color="'red'">我是P标签</p>
    <input type="text" v-focus>
</div>
1
2
3
4

# 自定义局部指令

/* 通过在Vue实例对象的directives属性添加
格式
new Vue({
    el: '模板ID',
    directives: {
        "指令名称": {
            生命周期钩子函数名称: function (el, obj) {}
        }
    }
});

0.自定义局部指令只能在对应的Vue实例挂载的模板使用
1.在定义的时候,指令名称不需要添加v- 
2.指令需要挂载到vue的生命周期钩子函数上,所以在自定指令的时候需要确定在该生命周期能获取在需要的元素
3.生命周期详解
bind:只调用一次,指令第一次绑定到元素时调用,在这里可以进行一次性的初始化设置
inserted:被绑定元素插入父节点时调用
... */
let app1 = new Vue({
    el: '#app1',
    directives: {
        "color": {
            bind: function (el, obj) {
                el.style.color = obj.value
            }
        }
    }
});
let app2 = new Vue({
    el: '#app2',
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<div id="app1">
    <p v-color="'red'">我是P标签</p>
</div>

<!--该模板不能使用v-color-->
<div id="app2">
    <p v-color="'red'">我是P标签</p>
</div>
1
2
3
4
5
6
7
8

# 钩子函数

一个指令定义对象可以提供如下几个钩子函数 (均为可选):

  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

  • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

  • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。

  • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。

  • unbind:只调用一次,指令与元素解绑时调用。

编辑 (opens new window)
#Vue
上次更新: 2022/03/20, 11:17:00
常用内置指令
使用组件的细节点

← 常用内置指令 使用组件的细节点→

最近更新
01
MyBatisPlus
03-20
02
MyBatis源码剖析-延迟加载
03-20
03
MyBatis源码剖析-二级缓存
03-20
更多文章>
Theme by Vdoing | Copyright © 2021-2022 HuKai | 赣ICP备17016768号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式