Vue基础
1.js6 变量定义使用
let 定义变量
const 定义常量
2.基本格式
<div id = "app"></div>
<script src="../js/vue.js"></script>
<script>
//let(变量)、const(常量)
const app = new Vue({
el: '#app',//用于挂载要管理的元素
date: { //用于定义数据
message: ''
}
})
</script>
3.console中为列表添加数据
itmle.moves.push("")
4.Mustache语法,但是只能在元素内容中使用
Mustache语法内可以写变量,也可以写表达式,如:
{{message + " " +date}}
{{message * 2}}
5. 常用指令,后边不跟参数
1) v-once 只在第一次展示数据,后边数据改变页面不变
2) v-html 把字符串当html语法进行展示
3) v-cloak 在vue解析之前隐藏该标签下的数据,解析后渲染
用法:<div id = 'app' v-once v-html v-cloak>
指令后不跟参数,直接使用
6.v-bind 动态绑定属性,语法糖 :src=" "
<div id = "app">
<img v-bing:src="imgURL" alt=""> <!--通用做法-->
<h2 :class="{类名1: true, 类名2: false}">
<!--第二种用法,当类名1的值为true时h2标签会使用该类的样式-->
{{message}}
</h2>
</div>
<script src="../js/vue.js"></script>
<script>
//let(变量)、const(常量)
const app = new Vue({
el: '#app',//用于挂载要管理的元素
date: { //用于定义数据
message: '',
imgURL: 'http://www.zhaobo.site:5543/uploads/2021/09/20210903090943.png'
}
})
</script>
1. v-bind的几种用法
第四种用法例子
练习:
点击列表中的哪一项,那么该项的文字变为红色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.fontClo{
color:red;
}
</style>
</head>
<body>
<div id = "app">
<ul>
<li v-for="(item,index) in message" v-on:click="clo(index)" :class="{fontClo : flage==index}">{{item}}</li>
</ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: ['海王','火影忍者','死神','进击的巨人'],
flage: 0,
},
methods: {
clo: function(index){
this.flage=index;
console.log(this.flage);
}
}
})
</script>
</body>
</html>
2. 动态绑定style,对象语法
<h2 :style="{key(属性名): value(属性值)}">{{message}}</h2> <!--语法-->
<h2 :style="{fontSize: '50px'}">{{message}}</h2><!--value的值必须要加单引号,否则会当成变量进行解析-->
<h2 :style="{fontSize: finalSize+'px'}">{{message}}</h2><!--value的值可以使变量和表达式 -->
7.计算属性 computed
用于对属性的值进行计算并返回,是属性,起名不要加动词
计算属性调用不需要加括号
计算属性多次调用执行一次,methods每次调用都会执行一次,计算属性的性能会更好
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id = "app">
<h2>
{{fullName}}
</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
firstName: "aaa",
lastName: "bbb"
},
computed:{
fullName: function(){
retrun this.firstName + this.lastName
}
}
})
</script>
</body>
</html>
1. 计算属性的完整写法
computed:{
set: function(newValue){
const names = newValue.split(' ');
this.firstName = names[0];
this.lastName = names[1];
},
get: function(){
return this.firstName + ' ' + this.lastName
}
}
set 方法要为属性复制,则需要传递参数
2. computed与methods对比
computed 值没有发生改变时,只会调用一次,内部有缓存
methods每次调用,都会重新调用一次
8. v-on
- 语法糖
<button @click="increment"></button>
-
参数
- 事件监听时无参数,则小括号可以不加
- 在事件定义是省略了小括号,但是方法本身是需要参数的,如果不传,则默认将浏览器自动生成的event对象传入函数。
- 在方法定义时,需要event参数,有需要其他参数时,在event参数的位置传$event即可。
-
修饰符
- @click.stop,解决事件冒泡问题,如同时监听按钮和按钮的上级div组件事件,使用了.stop修饰符后,点击按钮是只执行按钮的监听事件。
- @click.prevent,阻止组件默认事件,如input的submit的自动提交
- @keyup.{keyCode|keyAlias}监听键盘键帽点击
- @click…once 只触发一次回调
9. 条件判断
1. v-if
- v-if ="false"通过改变布尔值判断要不要显示
- v-if 和 v-else
- v-else-if
小问题:vue的v-if和v-else会共享input中的内容,即切换不清空input中的文本,如希望清空,则可以在组件上增加一个key属性,值设置不一样,则切换时文本清空
2. v-show
v-if: 值为false时,整个dom元素都没有,用于不需要频繁切换的情况。
v-show: 值为false时,dom元素display,元素隐藏。
10. v-for
- 遍历数组
v-for =" {item, index} in message"
- 遍历对象
v-for = "{value, key, index} in message"
- 使用时最好能够加一个key,便于复用,提升性能,高效的提升虚拟DOM的性能
<li v-for = "item in message" :key = "item" > {{item}} </li> //key必须保证唯一
- 响应式的方法有
- push()//在数组最后添加元素,可以添加多个元素
- pop() //删除数组中的最后一个元素
- shift() //删除数组第一个元素
- splice(start,) //在数组中间插入元素第二个元素传0,并且后面跟上要插入的元素,删除元素第二个参数传入删除几个元素(如果没传则删除所有),替换元素第二个元素传入要替换几个元素,在第三个以后的参数出入要替换成的元素
- unshift()//在数组前面添加元素,可以添加多个元素
- sort()//排序
- reverse//排序
通过索引值改变数组的话,不是响应式的。如果需要改变单独一个数组元素,可以用替换函数splice()或者Vue.set(要修改的对象this.letters,要修改的索引0,要修改的值‘bbbbbb’)
11. 过滤器
过滤器是一个函数,参数传入过滤器需要格式化的数据
const app = new Vue({
el: '#app',
data: {},
methods: {},
filters: {
showPrice(price){
return '¥'+price.toFixed(2)
}
}
})
//前端调用过滤器
<li>{{item.price | showPrice}} </li>
12. v-model
表单和数据的双向绑定
- 普通绑定
实现效果,input的value值和message实时双向绑定。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <div id = "app"> <h2> <input type = "text" v-model = "message"></input> </h2> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script> <script> const app = new Vue({ el: '#app', data: { message: "aaa", }, computed:{ fullName: function(){ retrun this.firstName + this.lastName } } }) </script></body></html>
- v-model与radio结合使用
<label for="man"> <input type="radio" id = "man" name ="sex" value = "男" v-model = "sex">男</input></label><labe for="woman"> <input type="radio" id = "woman" name ="sex" value = "女" v-model = "sex">女</input></labe>//当两个radio拥有相同的name时,两个互斥显示//该例子用sex变量接收选择的性别//v-model绑定了用一个变量时,自动互斥//label 的
-
v-model与checkbox结合使用
- 单选框
<label for="agree"> <input type="checkbox" id = "agree" v-model="isAgree">同意协议</input></label>//isAgree变量获取选择框的是否被选定,对应布尔值//for属性规定label与哪个表单元素绑定。绑定表单的id属性
- 多选框
<label for="agree"> <input type="checkbox" value="篮球" v-model="hobbiex">篮球 <input type="checkbox" value="足球" v-model="hobbiex">足球 <input type="checkbox" value="乒乓球" v-model="hobbiex">乒乓球</label>//使用hobbiex数组变量获取用户选择的所有内容,对应数组
-
v-model与select结合
- 单选
<select name = "abc" id = "" v-model="fruit"> <option value="苹果" >苹果</option> <option value="香蕉" >香蕉</option> <option value="葡萄">葡萄</option></select>//v-model必须写到select标签内,fruit获取用户选择内容,fruit为字符串类型
2. 多选
<select name = "abc" id = "" v-model="fruit" multiple> <option value="苹果" >苹果</option> <option value="香蕉" >香蕉</option> <option value="葡萄">葡萄</option></select>//select增加了multiple属性后即可多选,fruit为数组类型
-
修饰符
- lazy
不需要实时绑定,敲回车或者失去焦点之后在绑定
v-model.lazy="message"
- number
v-model默认绑定的类型为字符串类型,使用该修饰符之后默认为数字类型,使用时不需要在进行转换
v-model.number="message"
- trim
去除两边空格
v-model.trim="message"
13.whatch
可以监听变量值的改变,whatch内部是以变量名为名的函数,函数可以有newValue和oldValue两个参数。