Vue 常用指令学习笔记
一、这一章在讲什么
这一章主要讲 Vue 中最常用的几类指令:列表渲染、条件渲染、表单绑定、事件绑定。核心内容包括:v-for 怎样根据数组生成列表,v-if 和 v-show 怎样控制显示隐藏,v-model 怎样把表单和数据绑在一起,v-on 怎样给元素绑定事件,以及 methods 和 this 在交互里分别起什么作用。整体上,这一章是在把 Vue 从"能显示数据"推进到"能根据数据和用户操作做交互"。
二、核心概念
1. v-for
- 它是什么
v-for是 Vue 的列表渲染指令。
- 有什么作用(为什么引入这个概念?)
- 当页面要显示一组数据时,不需要手写很多重复标签,而是让 Vue 根据数据自动重复生成结构。
- 它的原理(怎么实现的?)
- Vue 会遍历数组或对象集合,每取出一项,就渲染一份对应的标签结构。
v-for="item in list"中:list是被遍历的数据源item是每次遍历时拿到的当前数据项
- 初学者容易混淆的点
item不是关键字,只是临时变量名。list是整组数据,不是某一项。
2. key
- 它是什么
key是v-for中给每一项设置的唯一标识。
- 有什么作用(为什么引入这个概念?)
- 当列表新增、删除、排序变化时,Vue 需要靠
key更准确地识别每一项。
- 当列表新增、删除、排序变化时,Vue 需要靠
- 它的原理(怎么实现的?)
- Vue 在更新列表时,会用
key判断"谁是谁",避免把不同数据项混在一起。
- Vue 在更新列表时,会用
- 初学者容易混淆的点
key可以类比"身份证"或"学号",不是数据库关键字那个层面的概念。index不太推荐当key,因为顺序一变,index也会变,容易让 Vue 识别不准确。
3. v-if
- 它是什么
v-if是 Vue 的条件渲染指令。
- 有什么作用(为什么引入这个概念?)
- 用来根据条件决定某个元素要不要渲染出来。
- 它的原理(怎么实现的?)
- 条件成立时,Vue 创建并渲染元素;条件不成立时,Vue 不渲染或移除这个元素节点。
- 初学者容易混淆的点
v-if="false"不是"只是隐藏",而是这个元素通常不会出现在 DOM 中。
4. v-show
- 它是什么
v-show也是 Vue 中控制显示隐藏的指令。
- 有什么作用(为什么引入这个概念?)
- 用来频繁切换元素显示和隐藏。
- 它的原理(怎么实现的?)
- 元素始终会先渲染出来,只是通过 CSS 的
display控制是否显示。
- 元素始终会先渲染出来,只是通过 CSS 的
- 初学者容易混淆的点
v-show="false"时,元素还在 DOM 中,只是看不见。
5. v-if / v-else-if / v-else
- 它是什么
- 这是 Vue 中的条件链式判断写法。
- 有什么作用(为什么引入这个概念?)
- 当一个条件不够,需要多种情况判断时,可以像
if ... else if ... else一样写。
- 当一个条件不够,需要多种情况判断时,可以像
- 它的原理(怎么实现的?)
- Vue 会按顺序判断条件,符合哪一个就渲染哪一个分支。
- 初学者容易混淆的点
v-else-if必须跟在v-if后面。v-else也必须跟在v-if或v-else-if后面,不能单独写。
6. v-model
- 它是什么
v-model是表单元素上的双向数据绑定指令。
- 有什么作用(为什么引入这个概念?)
- 可以方便地获取用户输入,也可以把数据直接显示到输入框等表单项中。
- 它的原理(怎么实现的?)
- Vue 一方面把数据同步到表单元素上,另一方面监听用户输入,再把变化同步回数据。
- 初学者容易混淆的点
- "双向"不是两个表单互相绑,而是"数据影响表单,表单也影响数据"。
v-model绑定的变量必须先在data()中定义。
7. v-on
- 它是什么
v-on是 Vue 中绑定事件的指令。
- 有什么作用(为什么引入这个概念?)
- 让页面在用户点击、输入、提交等操作时执行对应方法。
- 它的原理(怎么实现的?)
- 本质上和原生 JS 的事件监听思路一致,只是 Vue 允许你直接在模板中声明"这个事件触发哪个方法"。
- 初学者容易混淆的点
v-on:click="handle"中:click是事件名handle是方法名
@click="handle"是v-on:click="handle"的简写。
8. methods
- 它是什么
methods是 Vue 中存放方法的地方。
- 有什么作用(为什么引入这个概念?)
- 把点击按钮、清空表单、执行查询等行为逻辑集中写在这里。
- 它的原理(怎么实现的?)
- 当模板中的事件触发时,Vue 会去
methods中找到对应方法并执行。
- 当模板中的事件触发时,Vue 会去
- 初学者容易混淆的点
data()管数据,methods管动作,不要混在一起。
9. methods 中的 this
- 它是什么
methods中的this指向当前 Vue 实例。
- 有什么作用(为什么引入这个概念?)
- 这样我们就可以在方法里访问和修改
data()中定义的数据。
- 这样我们就可以在方法里访问和修改
- 它的原理(怎么实现的?)
- Vue 在执行这些方法时,会把它们放到当前 Vue 实例的上下文中,所以
this能拿到实例上的数据。
- Vue 在执行这些方法时,会把它们放到当前 Vue 实例的上下文中,所以
- 初学者容易混淆的点
- 这里的
this不是按钮本身,也不是当前 DOM 元素。 - 它表示"当前这个 Vue 应用实例",所以可以写
this.searchForm.name。
- 这里的
三、重难点
1. v-for 中的 item 和 list 要分清
- 结论
list是整组数据,item是每次遍历出来的一项。
- 原因
- Vue 是根据
list循环,然后把当前项临时交给item使用。
- Vue 是根据
- 通俗比喻或小例子
list像全班名单,item像点名时当前叫到的那个同学。
2. key 更像"身份证",不是普通编号
- 结论
key用来唯一识别每一项,最好用真正稳定唯一的值。
- 原因
- 顺序变化时,Vue 需要靠
key判断哪一项是谁。
- 顺序变化时,Vue 需要靠
- 通俗比喻或小例子
id像学号,index像座位号。换座位后座位号会变,但学号不会变,所以更适合用学号识别人。
3. v-if 和 v-show 虽然都能隐藏,但底层不同
- 结论
v-if是"要不要渲染",v-show是"已经渲染了,要不要显示"。
- 原因
v-if会控制元素创建/移除,v-show只是改display。
- 通俗比喻或小例子
v-if像"房间要不要建";v-show像"房间已经建好,只是开门或关门"。
4. v-if 和 v-show 的使用场景要分清
- 结论
- 不频繁切换用
v-if,频繁切换用v-show。
- 不频繁切换用
- 原因
v-if每次切换都可能涉及创建和删除;v-show只是改显示样式,更适合来回切换。
- 通俗比喻或小例子
- 偶尔用一次的临时房间,可以决定建不建;经常使用的房间,建好了直接开关门更合适。
5. v-model 的"双向"一定要真正理解
- 结论
- 双向绑定表示:数据变,表单跟着变;表单输入变,数据也跟着变。
- 原因
- Vue 一边把数据同步到输入框,一边监听输入框变化再改回数据。
- 通俗比喻或小例子
- 就像两个同步的记事板,一边改了,另一边也立刻同步。
6. v-model 为什么必须先在 data() 里定义
- 结论
- 模板里绑定谁,
data()中就要先有谁。
- 模板里绑定谁,
- 原因
- Vue 需要明确的数据来源,否则它不知道这个变量从哪里来。
- 通俗比喻或小例子
- 表单像前台登记表,
data()像后台数据库。前台要登记某项内容,后台得先有这个字段。
- 表单像前台登记表,
7. v-on、methods、this 要连起来理解
- 结论
v-on负责监听事件,methods负责写行为逻辑,this负责在逻辑里访问 Vue 数据。
- 原因
- 用户操作发生后,Vue 会去执行方法;方法中再通过
this拿到当前实例里的数据。
- 用户操作发生后,Vue 会去执行方法;方法中再通过
- 通俗比喻或小例子
v-on像按门铃,methods像开门动作,this像这户人家的主人,能拿到家里的东西。
四、代码理解
1. v-for 最小代表性代码
html
<ul>
<li v-for="student in students" :key="student.id">
{{ student.name }} - {{ student.age }} 岁
</li>
</ul>
javascript
data() {
return {
students: [
{ id: 1, name: '张三', age: 18 },
{ id: 2, name: '李四', age: 19 }
]
}
}
关键理解
students:整个数组student:每次遍历出来的一项:key="student.id":用学生id做唯一标识{``{ student.name }}:显示当前项的属性
语法规则总结
html
v-for="item in list"
v-for="(item, index) in list"
2. v-if / v-show 最小代表性代码
html
<p v-if="isShow">我是 v-if 控制的内容</p>
<p v-show="isShow">我是 v-show 控制的内容</p>
javascript
data() {
return {
isShow: true
}
}
关键理解
v-if:不成立时通常不渲染这个元素v-show:不成立时元素还在,只是display: none
条件链写法
html
<span v-if="gender == 1">男生</span>
<span v-else-if="gender == 2">女生</span>
<span v-else>未知</span>
语法规则总结
v-else-if必须跟在v-if后面v-else必须跟在v-if或v-else-if后面- 不能单独写
v-else
3. v-model 最小代表性代码
html
<div id="app">
<input type="text" v-model="message">
<p>{{ message }}</p>
</div>
javascript
data() {
return {
message: '你好'
}
}
每一步在做什么
message在data()中先定义好。- 输入框通过
v-model绑定到message。 - 页面文本通过
{``{ message }}显示message。 - 用户修改输入框时,
message也会跟着变化。 message变化后,页面文本也自动更新。
对象属性绑定示例
html
<input v-model="searchForm.name">
javascript
data() {
return {
searchForm: {
name: '',
gender: '',
job: ''
}
}
}
4. v-on + methods 最小代表性代码
html
<button @click="clearName">清空姓名</button>
javascript
data() {
return {
searchForm: {
name: '张三'
}
}
},
methods: {
clearName() {
this.searchForm.name = ''
}
}
每一步在做什么
@click="clearName":点击按钮时执行clearName方法。clearName()写在methods中。this指向当前 Vue 实例。this.searchForm.name就是在访问data()中的表单数据。- 改成空字符串后,如果页面上有绑定这个数据的地方,也会一起更新。
语法规则总结
html
v-on:click="handle"
@click="handle"
@是v-on:的简写。click是事件名。handle/clearName是方法名。
五、易错点
- 把
item当成固定关键字。
- 它只是临时变量名,可以换成别的名字。
- 以为
key随便写什么都行。
- 最好用稳定、唯一的
id,不要优先用会变的index。
- 以为
v-if和v-show只是语法不同。
- 实际上它们底层机制和适用场景都不同。
- 单独使用
v-else。
v-else必须紧跟在v-if/v-else-if后面。
- 以为
v-model只是"把输入框内容拿出来"。
- 它是双向绑定,既能从表单拿数据,也能把数据同步回表单。
v-model绑定了一个没在data()中定义的变量。
- 模板里要用的数据,都应该先在
data()中准备好。
- 以为
methods里的this是按钮或当前元素。
- 这里的
this指向 Vue 实例,不是 DOM 元素。
- 分不清
data()和methods。
data()放数据,methods放操作逻辑。
六、记忆口诀 / 通俗比喻
**v-for遍历数据,数据几条,页面几条。****key像身份证,index更像座位号。****v-if决定建不建,v-show决定开不开门。**- 不常切换用
v-if,频繁切换用v-show。 **v-model双向绑:数据变,表单变;表单变,数据也变。****v-on绑事件,methods写动作,this去拿数据。****data管状态,methods管行为。**
七、应用
这一章的内容在实际开发里用得非常多,尤其是做查询页面、管理页面、登录注册页面时。
可以把它们串成一个完整场景:
- 页面上有一个搜索表单,输入框用
v-model绑定查询条件 - 点击"查询"按钮时,用
v-on绑定点击事件 - 查询逻辑写在
methods中 - 方法里通过
this拿到表单数据 - 查询结果返回后,用
v-for把结果列表渲染到页面上 - 如果某些区域要按条件显示,就用
v-if或v-show控制
也就是说,这几类指令并不是分开的知识点,而是在真实页面里一起工作的:
用户输入 -> 数据同步 -> 点击事件 -> 方法处理 -> 列表渲染 -> 条件显示隐藏
这就是 Vue 做页面交互的基本链路。
八、最终总结
这一章的关键,是学会 Vue 里"数据怎么显示、条件怎么判断、列表怎么渲染、用户操作怎么处理"。v-for 负责列表渲染,推荐配合唯一 key 使用;v-if 和 v-show 都能控制显示隐藏,但底层机制和适用场景不同;v-model 负责表单和数据的双向绑定;v-on 负责绑定事件,methods 负责写操作逻辑,this 负责在方法中访问 data() 的数据。把这些串起来,你就已经能写出最基础的 Vue 交互页面了。