🗒️Vue 指令
来自官网 https://cn.vuejs.org
1. Class 和 Style 绑定
class 和 style 都是 attribute,所以可以使用 v-bind 指令。
:class是v-bind:class的缩写:style是v-bind:style的缩写
考虑到复杂绑定时用 v-bind 拼接生成字符串比较麻烦而且容易出错,所以 Vue 专门为 class 和 style 的 v-bind 用法提供了特殊的功能增强,就是除了字符串外,表达式的值还可以是对象或数组。
1.1 绑定对象
eg1. 给 class 绑定对象
<!-- 1. -->
<div :class="{ active: isActive}"></div>
<!-- 2. 和静态共存 -->
<div
class="static"
:class="{ active: isActive, 'text-danger': isError }"
></div>
<!-- 3. 绑定个对象 -->
<div :class="classObject"></div>
<!-- 4. 绑定个计算属性 -->
<div :class="classObject2"></div>eg2. 给 style 绑定对象
1.2 绑定数组
eg1. 给 class 绑定数组
在组件上使用。关于更多组件的 attribute 继承的细节,详见 透传 Attributes。
2. v-if 和 v-show
v-if 和 v-show它们的区别:
条件渲染
是真实地按条件渲染,它会确保事件监听器和子组件都会被销毁和重建
只是切换了元素的 CSS display 属性
初始渲染的开销
是惰性的。如果初次渲染时是 false,则不会做任何事情;只有当条件首次变为 true 时才被渲染
初始一定会被渲染(即在 DOM 树中保留该元素),而无论初始条件如何
切换的开销
更高
仅更改 display 属性
是否支持 <template>
支持
不支持
所以,v-show 适用于频繁切换,而 v-if 更适用于在运行时绑定条件很少改变的。
3. v-for
v-for3.1 用法
遍历一个数组
<li v-for="item in items"></li>解构
<li v-for="{ message } in items"></li>
<li v-for="(item, index) in items"></li>解构
<li v-for="({ message }, index) in items"></li>for-in
<li v-for="item of items"></li>for-of更接近 JavaScript 的迭代器语法
遍历一个对象:遍历对象的所有属性,顺序是基于对该对象调用
Object.keys()的返回值<li v-for="value in myObject"></li><li v-for="(value, key) in myObject"></li><li v-for="(value, key, index) in myObject"></li>
直接接受一个整数值
<span v-for="n in 10"></span>初值是从 1 开始
在 v-for 块中可以完整地访问父作用域内的属性和变量。多层嵌套的 v-for,作用域的工作方式和函数的作用域很类似,每个 v-for 作用域都可以访问到父级作用域。
v-for 也能在 <template> 上使用。
3.2 :key 绑定
:key 绑定对于通过 v-for 渲染的元素列表,Vue 默认按照“就地更新”的策略来更新。比如当数据项的顺序改变时,Vue 不会随之移动 DOM 元素的顺序,而是就地更新每个元素。
默认模式是高效的,但只适用于列表渲染输出的结果不依赖子组件状态或者临时 DOM 状态的情况(例如表单输入值)。
给每个元素对应的块提供一个唯一的 key 属性,可以让 Vue 跟踪每个节点,从而重用和重新排序现有的元素。key 绑定的值期望是一个基础类型的值,不要赋个对象。更多详见内置的特殊 Attributes key。
3.3 v-for 和 v-if
v-for 和 v-if不推荐同时使用
v-if和v-for,详见风格指南。若同时使用了,
v-if的优先级会更高,这意味着v-if的条件将无法访问到v-for作用域内定义的变量别名。更多请查阅列表渲染指南。通常会在外新包装一层
<template v-for><li v-if></li></template><template v-if><li v-for></li></template>
4. v-on
v-onv-on 指令可以监听 DOM 事件,比如 v-on:click="handler",简写为 @click="handler"。
内联事件处理器
比如
<button @click="count++">Add 1</button>比如
<button @click="say('hello')">Say hello</button>传事件参数
<button @click="(event) => warn('xxx', event)"></button>
方法事件处理器
比如
<button @click="greet">Greet</button>
4.1 事件修饰符
功能类似 event.preventDefault() 和 event.stopPropagation()。
.stop:停止冒泡.prevent:阻止默认.self:仅当event.target是元素本身时与原生
addEventListener事件相对应.capture:使用capture捕获模式.once:最多被触发一次.passive:和 scrolling 相关
修饰符可链式书写:
比如
<a @click.stop.prevent="doThat"></a>需注意顺序
@click.prevent.self会阻止元素及其子元素的所有点击事件的默认行为@click.self.prevent则只会阻止对元素本身的点击事件的默认行为
不要同时使用
.passive和.prevent因为
.passive向浏览器表明了不想阻止事件的默认行为
4.2 按键修饰符
常用按键的别名
.enter.tab.delete(捕获“Delete”和“Backspace”两个按键).esc.space.up.down.left.right
系统按键修饰符
.ctrl.alt.shift.meta
.exact修饰符:确定组合的系统按键修饰符鼠标按键修饰符
.left.right.middle
5. v-model
v-model关于表单输入的绑定,如果是手动连接值绑定和更改事件监听器可能会很麻烦,而 v-model 指令能帮我们简化很多。如下:
5.1 不同类型的输入
v-model 可以处理不同类型的输入,比如 <input>, <textarea>, <select> 元素。它还会根据所使用的元素自动使用对应的 DOM 属性和事件组合:
文本类型的
<input>和<textarea>元素会绑定valueproperty 并侦听input事件<input type="checkbox">和<input type="radio">会绑定checkedproperty 并侦听change事件<select>会绑定valueproperty 并侦听change事件
注意:v-model 会忽略任何表单元素上初始的 value, checked 或 selected attribute。它将始终将当前绑定的 JavaScript 状态视为数据的正确来源。
5.2 修饰符
.lazy:让v-model更新数据的时机从input事件之后变成change事件 之后.number:若输入框有type="number"该修饰符会自动启用.trim:自动去除两端的空格
Last updated