全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 8 分钟 ✍️ juanwangdev

自定义指令基础

Vue 自定义指令用于对普通 DOM 元素进行底层操作,适用于需要直接操作 DOM 的场景。

什么是指令

指令是带有 v- 前缀的特殊属性,Vue 内置 v-bindv-onv-model 等。当内置指令无法满足需求时,可通过自定义指令扩展能力。

自定义指令的核心价值:直接操作 DOM,适用于焦点控制、滚动行为、拖拽、权限控制等场景。

注册方式

全局注册

通过 Vue.directive() 在应用入口注册,所有组件均可使用。

JavaScript
// main.js
Vue.directive('focus', {
  inserted(el) {
    el.focus()
  }
})
vue
<!-- 组件中使用 -->
<input v-focus />

局部注册

在组件的 directives 选项中注册,仅当前组件可用。

vue
<template>
  <input v-focus />
</template>

<script>
export default {
  directives: {
    focus: {
      inserted(el) {
        el.focus()
      }
    }
  }
}
</script>

局部注册可避免全局污染,推荐优先使用。

指令对象结构

指令定义是一个对象,包含钩子函数。最常用的是 inserted 钩子:

JavaScript
Vue.directive('color', {
  inserted(el, binding) {
    el.style.color = binding.value || 'black'
  }
})
vue
<p v-color="'red'">红色文字</p>

简写形式

当只需在 bindupdate 时执行相同逻辑,可使用函数简写:

JavaScript
Vue.directive('color', function(el, binding) {
  el.style.color = binding.value
})

此写法等价于同时绑定 bindupdate 钩子。

使用场景

场景说明
自动聚焦表单输入框获取焦点
权限控制根据权限隐藏/禁用按钮
图片懒加载监听滚动后加载图片
防抖节流为事件添加防抖逻辑

要点总结

  • 自定义指令用于直接操作 DOM,弥补内置指令不足
  • 全局注册使用 Vue.directive(),局部注册使用 directives 选项
  • inserted 是最常用的钩子,在元素插入父节点时触发
  • 函数简写形式适用于 bindupdate 逻辑一致的场景

存放路径:articles/VUE/进阶/自定义指令与渲染函数/自定义指令基础.md

📝 发现内容有误?点击此处直接编辑

← 上一篇 渲染函数基础
下一篇 → CSS过渡与动画
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库