当前位置:首页 > 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 实现弹幕的方法 使用 CSS 动画和动态渲染 在 Vue 中实现弹幕效果,可以通过动态渲染弹幕元素并结合 CSS 动画实现。以下是具体步骤: 数据准备 创建一个数组存储弹幕数据,每条弹幕包…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…

vue实现导航

vue实现导航

使用 Vue Router 实现导航 Vue Router 是 Vue.js 官方提供的路由管理器,用于构建单页应用(SPA)的导航系统。以下是实现导航的基本步骤。 安装 Vue Router n…

vue sku 实现

vue sku 实现

Vue SKU 实现方案 在电商系统中,SKU(Stock Keeping Unit)是商品的最小库存单位,通常由多个属性组合而成(如颜色、尺寸等)。以下是基于 Vue 的实现方案。 数据结构设计…

vue实现忘记密码

vue实现忘记密码

Vue 实现忘记密码功能 忘记密码功能通常包括以下步骤:用户输入邮箱或手机号,系统发送验证码或重置链接,用户验证后设置新密码。以下是基于 Vue 的实现方法。 前端页面设计 创建一个忘记密码的表单页…