
文章目录一、vue中内置的指令v-text 指令用于将数据填充到标签中,作用和插值表达式类似,但是不会出现闪动问题。
v-html 指令用于将HTML片段填充到标签中,可能有安全问题。
v-pre 指令用于显示原始信息。
v-once 指令是只渲染一次,后面元素中的数据再更新变化,都不会重新渲染。
v-for 指令用于遍历,把一个数组对应为一组元素。
v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。指令简写为 @
v-bind 指令用于属性绑定,把数据绑定在HTML元素的属性上,指令简写为 : 要绑定的属性。
v-model 指令可以实现表单元素和 Model 中数据的双向数据绑定。
v-if & v-else-if & v-else 指令用于条件渲染。
v-if & v-show 指令用于隐藏和显示元素
v-if 的特点:每次都会重新删除或创建元素
v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式
注意 :
① 如果元素涉及到频繁的切换,最好不要使用 v-if 指令, 应该选择使用 v-show 指令; ② 如果元素可能一直不会被显示出来被用户看到,则选择使用 v-if 指令
二、vue中自定义指令在 Vue2.0 中,代码复用和抽象的主要形式是组件。然而,有的情况下,开发人员仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。
1. 自定义全局指令注册一个 v-focus 指令,实现了在页面加载完成之后自动让输入框获取到焦点的小功能。 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>全局自定义指令</title><script src="js/vue.js"></script></head><body><div id="app"><p>页面载入时,input 元素自动获取焦点:</p><input type="text" placeholder="我是全局自定义指令" v-focus></div><script>// 注册一个全局自定义指令 `v-focus`Vue.directive('focus', {// 当被绑定的元素插入到 dom 中时…… ,其中参数 el 为dom元素inserted: function (el) {// 聚焦元素el.focus()}})var vm = new Vue({el: '#app',data: {}})</script></body></html>
只要打开这个页面后还没点击过任何内容,这个输入框就应当还是处于聚焦状态。
效果演示: 
2. 自定义局部指令<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>局部自定义指令</title><script src="js/vue.js"></script></head><body><div id="app"><input type="text" placeholder="我是局部自定义指令" v-color="color"></div><script>var vm = new Vue({el: '#app',data: {color: 'red'},// 注册一个局部自定义指令 `v-color`directives: {color: {// binding 为自定义的函数形参,通过自定义属性传递过来的值,存到 binding.value 里面bind: function (el, binding) { // 根据指令的参数进行设置背景色 el.style.backgroundColor = binding.value}}}})</script></body></html>
只要通过指令绑定给了元素,不管元素有没有被插入到页面中去,这个元素肯定会有一个内联样式.
效果演示:
 注意 :
3. 钩子函数① 指令定义对象可以提供如下几个钩子函数 (均为可选): 钩子函数 | 使用 |
---|
bind | 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。 | inserted | 被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。 | update | 所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 。 | componentUpdated | 指令所在组件的 VNode 及其子 VNode 全部更新后调用。 | unbind | 只调用一次,指令与元素解绑时调用。 |
② 指令钩子函数会被传入以下参数: 参数 | 说明 |
---|
el | 指令所绑定的元素,可以用来直接操作 DOM。 | binding | 绑定一个对象。 | vnode | Vue 编译生成的虚拟节点。 | oldVnode | 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。 |
③ 绑定对象属性说明: 属性 | 说明 | 示例 |
---|
name | 指令名,不包含前缀 v-。 | v-focus 中的 focus。 | value | 指令的绑定的值(计算后)。 | v-my-directive=“1 + 1” 中,绑定值为 2。 | oldValue | 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。 | —— | expression | 字符串形式的指令表达式(不计算)。 | v-my-directive=“1 + 1” 中,表达式为 “1 + 1”。 | arg | 传给指令的参数,可选。 | v-my-directive:foo 中,参数为 “foo”。 | modifiers | 一个包含修饰符的对象。 | v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。 |
|