当前位置:首页 > VUE

vue的指令实现

2026-03-09 00:59:39VUE

Vue 指令的实现

Vue 指令是一种特殊的属性,用于在 DOM 元素上应用特定的行为。Vue 提供了一些内置指令(如 v-modelv-if),同时也支持自定义指令的实现。

内置指令的常见用法

v-model 实现双向数据绑定:

<input v-model="message" />
<p>{{ message }}</p>

v-ifv-show 控制元素显示:

<div v-if="isVisible">显示内容</div>
<div v-show="isActive">动态显示</div>

v-for 实现列表渲染:

<ul>
  <li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>

自定义指令的实现

注册全局自定义指令:

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

注册局部自定义指令:

new Vue({
  directives: {
    focus: {
      inserted: function (el) {
        el.focus()
      }
    }
  }
})

使用自定义指令:

<input v-focus />

指令的钩子函数

bind:只调用一次,指令第一次绑定到元素时调用。

bind: function(el, binding, vnode) {
  // 初始化设置
}

inserted:被绑定元素插入父节点时调用。

inserted: function(el, binding, vnode) {
  // DOM 操作
}

update:所在组件的 VNode 更新时调用。

vue的指令实现

update: function(el, binding, vnode, oldVnode) {
  // 响应式更新
}

componentUpdated:所在组件及子组件 VNode 全部更新后调用。

componentUpdated: function(el, binding, vnode, oldVnode) {
  // 完成更新后的操作
}

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

unbind: function(el, binding, vnode) {
  // 清理工作
}

指令参数传递

静态值传递:

<div v-demo="'fixed-value'"></div>

动态值传递:

<div v-demo="dynamicValue"></div>

参数对象传递:

vue的指令实现

Vue.directive('demo', {
  bind: function(el, binding) {
    console.log(binding.value)    // 指令的绑定值
    console.log(binding.oldValue) // 前一个值
    console.log(binding.arg)      // 参数
    console.log(binding.modifiers) // 修饰符对象
  }
})

指令修饰符

带修饰符的指令:

<div v-demo.slow="msg"></div>

处理修饰符:

Vue.directive('demo', {
  bind: function(el, binding) {
    if (binding.modifiers.slow) {
      // 慢速动画处理
    }
  }
})

函数简写

当只需要 bindupdate 钩子时可以使用简写:

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

对象字面量

传递多个值:

<div v-demo="{ color: 'white', text: 'hello' }"></div>

处理对象值:

Vue.directive('demo', {
  bind: function(el, binding) {
    console.log(binding.value.color) // "white"
    console.log(binding.value.text)  // "hello"
  }
})

动态指令参数

动态参数名:

<div v-[direction]="200"></div>
data: {
  direction: 'left'
}

标签: 指令vue
分享给朋友:

相关文章

vue分类实现

vue分类实现

Vue分类实现方法 在Vue中实现分类功能通常涉及数据分组、动态渲染和交互逻辑。以下是几种常见的实现方式: 基于计算属性的分类 通过计算属性对原始数据进行分组处理,适合静态或少量数据分类: com…

vue实现fadein

vue实现fadein

Vue 实现 FadeIn 效果 在 Vue 中实现淡入(FadeIn)效果可以通过 CSS 过渡、动画或第三方库实现。以下是几种常见方法: 使用 CSS 过渡 通过 Vue 的过渡系统结合 CSS…

vue实现定时

vue实现定时

Vue 实现定时功能的方法 使用 setInterval 和 clearInterval 在 Vue 中可以通过 setInterval 和 clearInterval 实现定时功能。在组件的 mou…

vue 实现循环

vue 实现循环

Vue 实现循环的方法 在 Vue 中,可以使用 v-for 指令来实现循环渲染列表数据。以下是几种常见的循环实现方式: 基本数组循环 <template> <ul>…

vue实现指引

vue实现指引

Vue 实现指引功能 Vue 中实现指引功能可以通过多种方式完成,常见的有使用第三方库或自定义实现。以下是几种常见方法: 使用第三方库(如 driver.js) 安装 driver.js: np…

vue列表查询实现

vue列表查询实现

实现 Vue 列表查询功能 基础列表渲染 在 Vue 中可以通过 v-for 指令实现列表渲染,结合计算属性动态过滤数据: <template> <div> &l…