vue 指令实现
Vue 指令实现
Vue 指令是 Vue.js 提供的特殊属性,用于在 DOM 元素上添加特殊行为。指令以 v- 前缀开头,例如 v-model、v-if、v-for 等。以下是实现自定义指令和常用内置指令的详细说明。
自定义指令的实现
注册全局自定义指令可以通过 Vue.directive 方法,局部自定义指令可以在组件选项中通过 directives 属性注册。
// 全局自定义指令
Vue.directive('focus', {
inserted: function (el) {
el.focus();
}
});
// 局部自定义指令
new Vue({
el: '#app',
directives: {
focus: {
inserted: function (el) {
el.focus();
}
}
}
});
自定义指令可以包含以下钩子函数:
bind:指令第一次绑定到元素时调用。inserted:被绑定元素插入父节点时调用。update:所在组件的 VNode 更新时调用。componentUpdated:所在组件及子组件的 VNode 全部更新后调用。unbind:指令与元素解绑时调用。
内置指令的使用
Vue 提供了一些常用的内置指令,以下是几个典型示例:
<!-- v-model 实现双向数据绑定 -->
<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>
<!-- v-if 条件渲染 -->
<p v-if="seen">Now you see me</p>
<!-- v-for 列表渲染 -->
<ul>
<li v-for="item in items" :key="item.id">{{ item.text }}</li>
</ul>
<!-- v-bind 动态绑定属性 -->
<img v-bind:src="imageSrc">
<!-- v-on 事件监听 -->
<button v-on:click="doSomething">Click me</button>
指令的参数和修饰符
指令可以接受参数和修饰符,用于更精细地控制行为。
<!-- 参数 -->
<a v-bind:href="url">Link</a>
<!-- 动态参数 -->
<a v-bind:[attributeName]="url">Link</a>
<!-- 修饰符 -->
<form v-on:submit.prevent="onSubmit">Submit</form>
指令的钩子函数参数
自定义指令的钩子函数可以接受以下参数:
el:指令绑定的元素。binding:包含指令信息的对象,如name、value、oldValue、arg、modifiers等。vnode:Vue 编译生成的虚拟节点。oldVnode:上一个虚拟节点。
Vue.directive('demo', {
bind: function (el, binding, vnode) {
console.log(binding.value);
}
});
指令的动态绑定
指令的值可以是动态的,通过 JavaScript 表达式或计算属性实现。
<div v-demo="'hello'"></div>
<div v-demo="dynamicValue"></div>
通过以上方法,可以灵活地实现和使用 Vue 指令,满足不同的业务需求。







