Vue--常用指令总结
1. Vue语法--插值表达式
1.1 目标
学习插值表达式, 在DOM中插入内容
1.2 学习
又叫: 声明式渲染/文本插值/大胡子语法
语法: {{ 表达式 }}
例子:
<template>
<div>
<h1>{{ msg }}</h1>
<h2>{{ obj.name }}</h2>
<h3>{{ obj.age > 18 ? '成年' : '未成年' }}</h3>
</div>
</template>
<script>
export default {
data() { // 格式固定, 定义vue数据之处
return { // key相当于变量名
msg: "hello, vue",
obj: {
name: "小vue",
age: 5
}
}
}
}
</script>
1.3 小结
1. 什么是插值表达式?
答案:双大括号,可以把Vue变量直接显示在标签内
2. Vue中变量声明在哪里?
答案:data函数内, return的对象, 对象内的key就是变量名
2. Vue指令-v-bind-动态属性
2.1 目标
学习v-bind, 给标签属性赋Vue变量
2.2 学习
vue指令, 实质上就是特殊的 html 标签属性, 特点: v- 开头
每个指令, 都有独立的作用
-
语法:
v-bind:属性名="vue变量"
-
简写:
:属性名="vue变量"
<template> <div> <a v-bind:href="url">点击去京东</a> <img :src="imgUrl" alt="" /> </div> </template> <script> // 目标:v-bind动态属性 // 语法:v-bind:属性名="vue变量" ===>简写 :属性名="表达式" // 作用:标签的原生属性添加vue变量 export default { data() { return { url: "http://www.jd.com", imgUrl: "https://img2.baidu.com/it/u=2108319215,1494231136&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=690", }; }, }; </script> <style> </style>
2.3 小结
如何给dom标签的属性设置Vue变量?
答案::属性名="Vue变量"
3. Vue指令-v-on-事件绑定
3.1 目标
学习v-on, 给绑定绑定事件
3.2 学习
-
语法
-
v-on:事件名="methods中的函数"
-
v-on:事件名="methods中的函数(实参)"
-
-
简写: @事件名="methods中的函数"
<!-- vue指令: v-on事件绑定-->
<p>你要买商品的数量: {{count}}</p>
<button v-on:click="addFn">增加1个</button>
<button v-on:click="addCountFn(5)">一次加5件</button>
<button @click="subFn">减少</button>
<script>
export default {
// ...其他省略
methods: {
addFn(){ // this代表export default后面的组件对象(下属有data里return出来的属性)
this.count++
},
addCountFn(num){
this.count += num
},
subFn(){
this.count--
}
}
}
</script>
3.3 小结
1. 如何给dom标签绑定事件?
答案:@事件名="methods里的函数名"
2. 如何给事件传值?
答案:@事件名="methods里的函数名(实参)"
4. 案例-点击说笑话
4.1 目标
点击按钮, 随机切换显示一个笑话
4.2 案例需求
-
准备1个变量, 给初始值, 显示到页面上
-
在准备一组笑话
-
点击按钮, 随机提取一个笑话字符串, 赋予给word变量
4.3 正确代码
<template>
<div>
<p>{{ word }}</p>
<button @click="jockBtnFn">点击说笑话</button>
</div>
</template>
<script>
export default {
data(){
return {
word: '这里是一条笑话',
jockArr: ['我去相亲网站去了, 那你找到对象了吗? 不! 我找到了他们网站的一个Bug', '这个需求很简单, 怎么实现我不管, 明天上线', '程序员是推动这个世界进步的人']
}
},
methods: {
jockBtnFn(){
let randNum = Math.floor(Math.random() * this.jockArr.length)
let str = this.jockArr[randNum]
this.word = str
}
}
}
</script>
4.4 小结
点击说笑话的实现思路是什么?
答案:写需求要先写静态标签,再考虑动态效果
绑定点击事件, 然后随机数从数组里取字符串
把字符串赋予给变量word, 影响p标签显示内容
5. Vue指令-v-on-事件对象
5.1 目标
vue事件处理函数中, 拿到事件对象
5.2 学习
语法:
-
无传参, 通过形参直接接收
-
传参, 通过$event指代事件对象传给事件处理函数
<template> <div> <a @click="one" href="http://www.baidu.com">阻止百度</a> <hr> <a @click="two(10, $event)" href="http://www.baidu.com">阻止去百度</a> </div> </template> <script> export default { methods: { one(e){ e.preventDefault() }, two(num, e){ e.preventDefault() } } } </script>
5.3 小结
Vue事件处理函数,如何拿到事件对象?
答案:无实参,直接用第一个形参接收
有实参,手动传入$event
6. Vue指令-v-on-修饰符
6.1 目标
事件修饰符 - 给事件带来更强大的功能
6.2 学习
语法:
-
@事件名.修饰符="methods里函数"
-
.stop - 阻止事件冒泡
-
.prevent - 阻止默认行为
<template> <div @click="fatherFn"> <!-- vue对事件进行了修饰符设置, 在事件后面.修饰符名即可使用更多的功能 --> <button @click.stop="btn">.stop阻止事件冒泡</button> <a href="http://www.baidu.com" @click.prevent="btn">.prevent阻止默认行为</a> </div> </template> <script> export default { methods: { fatherFn(){ console.log("father被触发"); }, btn(){ console.log(1); } } } </script>
-
6.3 小结
Vue有哪些主要修饰符,都有什么功能?
答案:.stop - 阻止事件冒泡
.prevent - 阻止默认行为
7. Vue指令-v-on-按键修饰符
7.1 目标
给键盘事件, 绑定修饰符
7.2 学习
-
语法:
-
@keyup.enter - 监测回车按键
-
@keyup.esc - 监测返回按键
-
<template>
<div>
<input type="text" @keyup.enter="entFn" />
<br />
<input type="text" @keyup.esc="escFn" />
</div>
</template>
<script>
// 目标:键盘事件 - 修饰符
// 语法:
// @事件名.修饰符="methods里方法名"
// .enter - 只有触发enter键才会执行函数体
// .esc - 只有触发esc键才会执行函数体
export default {
methods: {
entFn() {
console.log("用户按了enter键");
},
escFn() {
console.log("用户按了esc键");
},
},
};
</script>
7.3 小结
1. 按键修饰符如何使用?
答案:@键盘事件.按键修饰符="methods里的函数名"
2. 有哪些主要按键修饰符?
答案:.enter - 只有按下回车才能触发这个键盘事件函数
.esc - 只有按下取消键才能触发这个键盘事件函数
8. 案例--翻转世界
8.1 目标
点击按钮 - 把文字取反显示 - 再点击取反显示(回来了)
提示: 把字符串取反赋予回去
效果演示:
8.2 正确代码
<template>
<div>
<h1>{{ message }}</h1>
<button @click="btn">逆转世界</button>
</div>
</template>
<script>
// 目标: 点击翻转
// 1.准备标签和变量初始值
// 2.绑定点击事件
export default {
data() {
return {
message: "HELLO, WORLD",
};
},
methods: {
btn(){
// 3.转数组
// let arr = this.msg.split("");
// 4.翻转数组
// arr.reverse();
// 5.数组转字符串
// this.msg = arr.join("");
// 简写
this.message = this.message.split("").reverse().join("")
}
}
};
</script>
8.3 小结
点击翻转字符串显示思路是什么?
答案:写需求要先写静态标签,再考虑动态效果,找到第一步干什么
记住方法的特点 - 可以自己总结字典和口诀
9. Vue指令-v-model-双向绑定1
9.1 目标
学习v-model, 把表单值和Vue变量双向绑定
9.2 学习
-
语法: v-model="vue数据变量"
-
双向数据绑定
-
数据变化 -> 视图自动同步
-
视图变化 -> 数据自动同步
-
-
最后演示: 用户名绑定 - Vue内部是MVVM设计模式
<template>
<div>
<div>
<span>用户名:</span>
<input type="text" v-model="userName" />
</div>
<div>
<span>密码:</span>
<input type="password" v-model="userPass" />
</div>
<div>
<span>来自:</span>
<!-- select身上写v-model option身上写value -->
<select v-model="from">
<option value="北京">北京市</option>
<option value="上海">上海市</option>
<option value="广州">广州市</option>
</select>
</div>
<div>
<span>爱好:</span>
<!-- v-model遇到复选框
vue变量 非数组类型 关联复选框 checked属性 (true/false)
vue变量 数组类型 关联复选框value属性
-->
<input type="checkbox" v-model="hobby" value="抽烟" />抽烟
<input type="checkbox" v-model="hobby" value="喝酒" />喝酒
<input type="checkbox" v-model="hobby" value="烫头" />烫头
</div>
<div>
<span>性别:</span>
<input type="radio" v-model="gender" name="sex" value="男生" />男
<input type="radio" v-model="gender" name="sex" value="女生" />女
</div>
<div>
<span>自我介绍:</span>
<textarea v-model="intro"></textarea>
</div>
</div>
</template>
<script>
// 目标:v-model指令
// 作用:把value属性和vue变量(双向)绑定到一起
// 语法:v-model="vue变量"
// 双向:
// 表单标签value值改变 --> vue变量改变
// vue变量改变 --> 表单标签value值改变
export default {
data() {
return {
userName: "张三",
userPass: "",
from: "上海",
hobby: [],
gender: "男生",
intro: "",
};
},
};
</script>
9.3 小结
1. v-model用在哪里?
答案:暂时只能用在表单标签上
2. v-model有什么作用?
答案:把Vue的"数据变量"和表单的"value属性"双向绑定在一起
10. Vue指令-v-model-修饰符
10.1 目标
给v-model扩展额外功能
10.2 学习
-
语法:
-
v-model.修饰符="vue数据变量"
-
.number 以parseFloat转成数字类型
-
.trim 去除首尾空白字符
-
.lazy 在change时触发而非inupt时
<template> <div> <div> <span>年龄:</span> <input type="text" v-model.number="age"> </div> <div> <span>人生格言:</span> <input type="text" v-model.trim="motto"> </div> <div> <span>自我介绍:</span> <textarea v-model.lazy="intro"></textarea> </div> </div> </template> <script> export default { data() { return { age: "", motto: "", intro: "" } } } </script>
-
10.3 小结
1. Vue针对v-model有哪些修饰符来提高我们编程效率?
答案:.number - 转成数值类型后再赋予给Vue数据变量
.trim - 去除两边空格后把值赋予给Vue数据变量
.lazy - 等表单失去焦点,才把值赋予给Vue数据变量
11. Vue指令-v-html
11.1 目标
学习v-html, 设置内容
11.2 学习
-
语法:
-
v-html="vue数据变量"
-
<template>
<div>
<p v-html="str"></p>
</div>
</template>
<script>
export default {
data() {
return {
str: "<span>我是一个span标签</span>"
}
}
}
</script>
总结: v-html把值当做html解析
注意:v-html会覆盖插值表达式
11.3 小结
1. v-html有什么作用?
答案:可以设置标签显示的内容
2. 和插值表达式区别是什么?
答案:插值表达式把值当成普通字符串显示
v-html把值当成标签进行解析显示
12. Vue指令-v-show和v-if
12.1 目标
控制标签显示或隐藏
12.2 学习
-
语法:
-
v-show="vue变量"
-
v-if="vue变量"
-
-
原理
-
v-show 用的display:none隐藏 (频繁切换使用)
-
v-if 直接从DOM树上移除
-
-
高级
-
v-else使用
<template> <div> <h1 v-show="isOk">v-show的盒子</h1> <h1 v-if="isOk">v-if的盒子</h1> <div> <p v-if="age > 18">我成年了</p> <p v-else>还得多吃饭</p> </div> </div> </template> <script> export default { data() { return { isOk: true, age: 15 } } } </script>
-
总结: 使用v-show和v-if以及v-else指令, 方便通过变量控制一套标签出现/隐藏
12.3 小结
1. Vue如何控制标签显示/隐藏?
答案:v-show或v-if,给变量赋予true/false,显示/隐藏
2. 区别是什么?
答案: v-show是用css方式显示/隐藏标签
v-if直接从DOM树上添加/移除
v-if可以配合v-else使用
13. Vue指令-v-for
13.1 目标
学习v-for, 用数据循环生成标签
13.2 学习
-
语法
-
v-for="(值变量, 索引变量) in 目标结构"
-
v-for="值变量 in 目标结构"
-
-
目标结构:
-
可以遍历数组 / 对象 / 数字 / 字符串
-
-
注意:
v-for的临时变量名不能用到v-for范围外
同级标签的key值不能重复
1. 遍历数组
<template>
<div id="app">
<!-- v-for 把一组数据, 渲染成一组DOM -->
<!-- 口诀: 让谁循环生成, v-for就写谁身上 -->
<p>学生姓名</p>
<ul>
<li v-for="(item, index) in arr" :key="item">
{{ index }} - {{ item }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
arr: ["小明", "小欢欢", "大黄"]
}
}
</script>
2. 遍历数组内对象
<template>
<div id="app">
<!-- 省略其他 -->
<p>学生详细信息</p>
<ul>
<li v-for="obj in stuArr" :key="obj.id">
<span>{{ obj.name }}</span>
<span>{{ obj.sex }}</span>
<span>{{ obj.hobby }}</span>
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
// ...省略其他
stuArr: [
{
id: 1001,
name: "孙悟空",
sex: "男",
hobby: "吃桃子",
},
{
id: 1002,
name: "猪八戒",
sex: "男",
hobby: "背媳妇",
}
]
}
}
}
</script>
13.3 小结
1. v-for如何循环列表?
答案:先准备目标数据结构
可以遍历数组/对象/固定数字/字符串
谁想循环就把v-for写谁身上
2. v-for注意事项?
答案:值变量和索引变量不能用到v-for范围以外
v-for="(值变量, 索引变量) in Vue变量" - 一定要注意in两边必须有空格
下一篇: 解赵薇养生之道,内心光洁是法宝