当前位置:首页 > VUE

vue指令实现源码

2026-01-19 06:46:54VUE

以下是 Vue 指令实现的源码解析,主要分为核心实现逻辑和常见指令示例:

Vue 指令核心实现

Vue 的指令系统通过 directives 模块实现,核心代码位于 src/core/vdom/modules/directives.js。关键实现逻辑如下:

// 指令钩子函数
export default {
  create: updateDirectives,
  update: updateDirectives,
  destroy: function unbindDirectives(vnode) {
    updateDirectives(vnode, emptyNode)
  }
}

function updateDirectives(oldVnode, vnode) {
  if (oldVnode.data.directives || vnode.data.directives) {
    _update(oldVnode, vnode)
  }
}

指令注册机制

指令通过 Vue.directive() 全局注册或组件选项的 directives 局部注册:

// 全局注册
Vue.directive('focus', {
  inserted: function (el) {
    el.focus()
  }
})

// 局部注册
new Vue({
  directives: {
    focus: {
      inserted: function (el) {
        el.focus()
      }
    }
  }
})

常见内置指令实现

v-model

双向绑定实现原理(以 input 为例):

function model(el, dir, _warn) {
  const value = dir.value
  const modifiers = dir.modifiers
  const tag = el.tag

  if (tag === 'input') {
    el.addEventListener('input', () => {
      context[value] = el.value
    })
  }
}

v-show

通过 CSS display 属性控制:

function show(el, value) {
  el.style.display = value ? '' : 'none'
}

v-if/v-else

通过注释节点和条件渲染实现:

function processIfConditions(el, parent) {
  const prev = findPrevElement(parent.children)
  if (prev && prev.if) {
    addIfCondition(prev, {
      exp: el.elseif,
      block: el
    })
  }
}

自定义指令生命周期

指令包含以下生命周期钩子:

bind(el, binding, vnode) {
  // 只调用一次,指令第一次绑定到元素时调用
}

inserted(el, binding, vnode) {
  // 被绑定元素插入父节点时调用
}

update(el, binding, vnode, oldVnode) {
  // 所在组件的 VNode 更新时调用
}

componentUpdated(el, binding, vnode, oldVnode) {
  // 所在组件及子组件全部更新后调用
}

unbind(el, binding, vnode) {
  // 只调用一次,指令与元素解绑时调用
}

指令参数解析

binding 对象包含以下属性:

vue指令实现源码

{
  name: '指令名(不带v-前缀)',
  value: '指令的绑定值',
  oldValue: '指令绑定的前一个值',
  expression: '字符串形式的指令表达式',
  arg: '传给指令的参数',
  modifiers: '包含修饰符的对象'
}

以上内容展示了 Vue 指令系统的核心实现机制,包括注册方式、生命周期管理以及常见内置指令的实现原理。

标签: 指令源码
分享给朋友:

相关文章

vue实现登录源码

vue实现登录源码

以下是一个基于 Vue.js 的登录功能实现示例,包含前端代码和关键逻辑说明: 登录页面组件 <template> <div class="login-container"&g…

vue指令的实现

vue指令的实现

Vue 指令的实现原理 Vue 指令是 Vue.js 提供的特殊属性,用于在 DOM 元素上添加特定行为。指令的实现涉及 Vue 的编译、虚拟 DOM 和响应式系统。 指令的注册 Vue 指令可以通…

vue的指令实现

vue的指令实现

Vue 指令的实现方式 Vue 指令是带有 v- 前缀的特殊属性,用于在 DOM 元素上应用响应式行为。Vue 提供了一些内置指令(如 v-model、v-if),同时也支持自定义指令。 内置指令示…

vue源码实现分析

vue源码实现分析

Vue 源码核心实现分析 Vue 的源码实现主要围绕响应式系统、虚拟 DOM、模板编译和组件化等核心概念展开。以下是对关键部分的详细分析: 响应式系统实现 Vue 使用 Object.defineP…

vue实现轮播图源码

vue实现轮播图源码

Vue 轮播图实现方法 使用 Vue 实现轮播图可以通过原生开发或借助第三方库(如 Swiper)完成。以下是两种常见实现方式: 原生 Vue 实现轮播图 核心代码示例: <template…

如何运行react源码

如何运行react源码

运行 React 源码的步骤 克隆 React 源码仓库 从官方 GitHub 仓库克隆 React 源码: git clone https://github.com/facebook/reac…