🗒️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 用法提供了特殊的功能增强,就是除了字符串外,表达式的值还可以是对象或数组。
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 绑定对象
eg1. 给 class 绑定数组
在组件上使用。关于更多组件的 attribute 继承的细节,详见 透传 Attributes。
2. v-if 和 v-show
它们的区别:
是真实地按条件渲染,它会确保事件监听器和子组件都会被销毁和重建
是惰性的。如果初次渲染时是 false,则不会做任何事情;只有当条件首次变为 true 时才被渲染
初始一定会被渲染(即在 DOM 树中保留该元素),而无论初始条件如何
所以,v-show 适用于频繁切换,而 v-if 更适用于在运行时绑定条件很少改变的。
遍历一个数组
<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>
<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> 上使用。
对于通过 v-for 渲染的元素列表,Vue 默认按照“就地更新”的策略来更新。比如当数据项的顺序改变时,Vue 不会随之移动 DOM 元素的顺序,而是就地更新每个元素。
默认模式是高效的,但只适用于列表渲染输出的结果不依赖子组件状态或者临时 DOM 状态的情况(例如表单输入值)。
给每个元素对应的块提供一个唯一的 key 属性,可以让 Vue 跟踪每个节点,从而重用和重新排序现有的元素。key 绑定的值期望是一个基础类型的值,不要赋个对象。更多详见内置的特殊 Attributes key。
3.3 v-for 和 v-if
通常会在外新包装一层
<template v-for><li v-if></li></template>
<template v-if><li v-for></li></template>
v-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>
功能类似 event.preventDefault() 和 event.stopPropagation()。
.self:仅当 event.target 是元素本身时
与原生 addEventListener 事件相对应
修饰符可链式书写:
比如 <a @click.stop.prevent="doThat"></a>
需注意顺序
@click.prevent.self 会阻止元素及其子元素的所有点击事件的默认行为
@click.self.prevent 则只会阻止对元素本身的点击事件的默认行为
不要同时使用 .passive 和 .prevent
因为 .passive 向浏览器表明了不想阻止事件的默认行为
常用按键的别名
.delete (捕获“Delete”和“Backspace”两个按键)
关于表单输入的绑定,如果是手动连接值绑定和更改事件监听器可能会很麻烦,而 v-model 指令能帮我们简化很多。如下:
v-model 可以处理不同类型的输入,比如 <input>, <textarea>, <select> 元素。它还会根据所使用的元素自动使用对应的 DOM 属性和事件组合:
文本类型的 <input> 和 <textarea> 元素会绑定 value property 并侦听 input 事件
<input type="checkbox"> 和 <input type="radio"> 会绑定 checked property 并侦听 change 事件
<select> 会绑定 value property 并侦听 change 事件
注意:v-model 会忽略任何表单元素上初始的 value, checked 或 selected attribute。它将始终将当前绑定的 JavaScript 状态视为数据的正确来源。
.lazy:让 v-model 更新数据的时机从 input 事件之后变成 change事件 之后
.number:若输入框有 type="number" 该修饰符会自动启用