Vue.js指令总结:
指令 (Directives) 是带有 v- 前缀的特殊特性。指令特性的值预期是单个 Javascript 表达式;
指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。
Vue指令总结如下:
1. v-if
如果,用于有条件性地渲染一块内容,这块内容只会在指令的表达式返回truthy值的时候被渲染;
比如:hello world
v-else
与v-if配套使用,使用v-else指令来表示v-if的“else块”,它必须紧跟在带v-if或者v-else-if的元素的后面,否则它将不会被识别。
比如:
0.5">Now you see me
Now you don't
v-else-if
充当v-if的“else-if块”,可以联系使用,它也必须紧跟在带v-if或者v-else-if的元素之后。
比如:
A
B
C
Not A/B/C
实例代码1:
Vue条件渲染 0"> count 大于0, 当前count的值是:{{count}} -5"> count 介于0和-5之间 count的值是:{{count}}
show: {{count}} {{msg}}
实例代码2:
条件/列表渲染 {{item}}
{{item1.name}} -- {{item1.age}}
30"> {{item2.name}}, 你老了,你个老男人 {{item2.name}},你老了,你个老阿姨 {{item2.name}},{{item2.age}}岁,好年轻
{{item3.name}}-{{item3.age}}-{{item3.sex}}
2. v-show
用于根据条件展示元素的内容,带有v-show的元素始终会被渲染并保留在DOM中,
v-show只是简单地切换元素的CSS属性display,其属性值为none||block;
v-show不支持元素,也不支持v-else.
比如:
Hello!
v-if 与 v-show的区别:
v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。
实例代码:
Vue - v-show show1: {{count}} = 5">show2: {{count}} {{msg}} {{msg}}
3. v-bind
绑定属性,用于响应式地更新HTML特性;
比如:Hello World
v-bind:class 绑定HTML Class,用于动态地切换class;
比如:
v-bind:style 绑定内联样式,用于引入CSS样式渲染内容;CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用单引号括起来) 来命名
比如:
实例代码:
Vue-绑定class与样式 兴百姓苦 亡百姓苦
4. v-for
用于循环列表,添加 :key 提升渲染效率/性能, 要求每一项循环的key 不一样, 也可用 :key="index",
如果对列表进行频繁的变更, 比如排序时, 使用 index 就不适合了
比如:
v-for=“item of list”,v-for表示循环list,依次输出item ,:key可以提升遍历效率,但key 值不能相同;key值相同时,用index做区别;
通常情况下,不推荐同时使用v-if和v-for。当同时使用它们时,v-for 具有比 v-if 更高的优先级。
v-for 指令根据一组数组的选项列表进行渲染。v-for 指令需要使用 item in items 形式的特殊语法,items 是源数据数组并且 item 是数组元素迭代的别名。
实例代码1:
Vue指令—— v-if,v-show,v-for hello world
hello world
- {{item}}
- #{{item}}
- &{{item}}
实例代码2:
Vue —— v-for
- {{item.message}}
5. v-text
会直接输出html语句,会对模板数据进行转译
比如:
6. v-html
不会输出html语句,不会对模板数据进行转译
比如:
实例代码:
Vue入门 {{msg}}--{{number}}
{{msg}}
7. v-model
双向数据绑定,数据与页面的显示会同时变化;
比如:
使用v-model指令在表单 、
它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。
v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值而总是将 Vue 实例的数据作为数据来源。
你应该通过 Javascript 在组件的 data 选项中声明其初始值。
实例代码:
Vue-监听器
{{ fullStr }}
v-model 在内部使用不同的属性为不同的输入元素并抛出不同的事件:
text 和 textarea 元素使用 value 属性和 input 事件;
checkbox 和 radio 使用 checked 属性和 change 事件;
select 字段将 value 作为 prop 并将 change 作为事件。
在文本区域插值 () 并不会生效,应用 v-model 来代替。
如果 v-model 表达式的初始值未能匹配任何选项,
对于单选按钮,复选框及选择框的选项,v-model 绑定的值通常是静态字符串 (对于复选框也可以是布尔值)
v-model数据绑定修饰符:
(1) .lazy : 在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 。
你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步。
比如:
(2) .number : 给v-model添加.number修饰符,将用户的输入值自动转化为数值类型
比如:
(3) .trim : 给v-model添加.trim修饰符,可以自动过滤用户输入的首位空白字符。
比如:
实例代码:
v-model用法 您的用户名为: {{username}}
您的座右铭:
{{message}}
请选择你的爱好:
您的爱好是: {{checkedNames}}
请选择您的性别:
您的性别是: {{sex}}
请选择您的出生地:
您的出生地是: {{country}}
请选择您最喜欢的城市:
您最喜欢的城市是: {{citys}}
看作者学诗词:
诗词: {{poetryDemo}}
一句话证明自己
你说的是:{{msg1}}
请输入您的年龄:
您的年龄是:{{age}}
请输入一段文本信息:
文本信息: {{msg2}}
8. v-on
绑定事件,用于监听DOM事件,在触发的时候运行一些Javascript代码;简化写法:@
比如:
上面的代码等价于:
Vue.js 为 v-on 提供了事件修饰符,按键修饰符,系统修饰键,鼠标按钮修饰符等。
实例代码:
Vue - v-on 点击次数:{{counter}}
修饰符是由点开头的指令后缀来表示的。
(1)事件修饰符如下:
.stop
.prevent
.capture
.self
.once
.passive
.once
.passive
用法及作用如下:
...
...
.once 修饰符还能被用到自定义的组件事件上。
Vue 还对应 addEventListener 中的 passive 选项提供了 .passive 修饰符。
...
这个 .passive 修饰符尤其能够提升移动端的性能。
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。
因此,用 v-on:click.prevent.self 会阻止所有的点击,
而 v-on:click.self.prevent 只会阻止对元素自身的点击。
事件修饰符.passive 和 .prevent 不能同时使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。
请记住,.passive 会告诉浏览器你不想阻止事件的默认行为。
(2)按键修饰符
在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:
比如:
你可以直接将 KeyboardEvent.key 暴露的任意有效按键名转换为 kebab-case 来作为修饰符。
在上述示例中,处理函数只会在 $event.key 等于 PageDown 时被调用。
按键码KeyCode的事件用法虽然已被废弃,但是在Vue中使用KeyCode特性也是可以的,为了在必要的情况下支持旧浏览器,Vue 提供了绝大多数常用的按键码的别名,如下:
.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right
另外我们可以通过全局config.keyCodes对象自定义按键修饰符别名,如下:
// 可以使用 `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112
(3)系统修饰键
Vue为我们提供了如下系统修饰键,来实现仅在按下相应按键时才触发鼠标或键盘事件的监听器。
.ctrl
.alt
.shift
.meta
.exact
用法如下:
Do something
.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。
请注意修饰键与常规按键不同,在和 keyup 事件一起用时,事件触发时修饰键必须处于按下状态。
换句话说,只有在按住 ctrl 的情况下释放其它按键,才能触发 keyup.ctrl。而单单释放 ctrl 也不会触发事件。
如果你想要这样的行为,请为 ctrl 换用 keyCode:keyup.17。
(4)鼠标按钮修饰符
鼠标按钮修饰符限制处理函数仅响应特定的鼠标按钮,具体如下:
.left
.right
.middle
实例代码:
Vue
- {{todo.text}}
9.自定义指令
在 Vue2.0 中,代码复用和抽象的主要形式是组件。有时候,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。
(1)自定义全局指令,语法如下:
Vue.directive('指令名', {
//钩子函数
})
比如:
// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
(2)自定义局部指令
在new Vue()实例内部,定义如下:
directives: {
指令名: {
//指令的定义
}
}
比如:
directives: {
focus: {
// 指令的定义
inserted: function (el) {
el.focus()
}
}
}
在自定义指令的时候,需要用到指令钩子函数。具体可选的钩子函数如下:
(1)bind: 只调用一次,用于进行一次性的初始化设置,当指令第一次绑定到元素时调用。
(2)inserted: 被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
(3)update: 所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。
(4)componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
(5)unbind:只调用一次,指令与元素解绑时调用。
指令钩子函数的参数:
(1)el:指令所绑定的元素,可以用来直接操作 DOM 。
(2)binding:一个对象,包含以下属性:
name:指令名,不包括 v- 前缀。
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 }。
(3)vnode:Vue 编译生成的虚拟节点。移步 VNode API 来了解更多详情。
(4)oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。
实例代码1:
Vue自定义全局指令
实例代码2:
Vue-自定义全局指令 曾经有一份美味的鸡腿,放在我面前,我没有好好珍惜,等别人吃完了,我才后悔莫及。如果再来一份,别人一定抢不过我。
爱别离,怨长久,求不得, 放不下
实例代码3:
vue-自定义局部指令 {{userList}}
{{us.name}}
更多关于Vue.js的点点滴滴未完待续,相关实例代码后面会开放,请多多支持我!



