系列文章目录
文章目录
- 系列文章目录
- 一、按键修饰符
- 二、checkbox单选与多选
- 三、radio
- 四、v-model修饰符
- 五、vue生命周期
- 六、vue与后端交互
一、按键修饰符
@keydown 当用户按下键盘键时触发,如果按住不放的话,会重复触发此事件
@keyup 当用户按下键盘键当按键恢复时触发,如果按住不放的话,会重复触发此事件
@keypress 当用户释放键盘上的字符键时触发,对退格没有响应
触发顺序 keydown>keypress>keyup 在vue中只有keydown能够赶上数据双向绑定的刷新速度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
<p>按下任意键触发<input type="text" v-model="mytext1" @keydown="pressbtn1" />输入:{{mytext1}}</p>
<p>按下字符键触发<input type="text" v-model="mytext2" @keyup="pressbtn2" />输入:{{mytext2}}</p>
<p>按下释放后触发<input type="text" v-model="mytext3" @keypress="pressbtn3" />输入:{{mytext3}}</p>
<p><input type="text" v-model="mytext4" @keydown="pressbtn4" @keyup="pressbtn5" @keypress="pressbtn6">输入:{{mytext4}}</p>
</div>
<script>
var vm = new Vue({
el:'#app',
data: {
mytext1:'',
mytext2:'',
mytext3:'',
mytext4:'',
},
methods:{
pressbtn1(){
console.log(this.mytext1)
},
pressbtn2(){
console.log(this.mytext2)
},
pressbtn3(){
console.log(this.mytext3)
},
pressbtn4(){
console.log('keydown')
},
pressbtn5(){
console.log('keyup')
},
pressbtn6(){
console.log('keypress')
},
},
})
</script>
</body>
</html>
二、checkbox单选与多选
单选:
通过v-model来设置其对应的变量,value来对应选中后之前所对应变量的值
<input type="checkbox" @change="chooise_one();summation1()" v-model="lists" :value="commodity">
多选:
通过v-model来设置其对应的变量,value来对应选中后之前所对应变量的值,区别在于多选情况,多选的地方会将所有的value在变量中组装为一个数组
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
<table>
<thead>
<tr>
<th>商品名</th>
<th>商品单价</th>
<th>商品数量</th>
<th>全选/全不选 <input type="checkbox" @change="chooise_all();summation1()" v-model="chooiseAll"></th>
</tr>
</thead>
<tbody>
<tr v-for="commodity in commoditys">
<td>{{commodity.name}}</td>
<td>{{commodity.price}}</td>
<!-- 计算机把小数转换成二级制,会出现无限循环的情况。再把无限循环的二级制转化成十进制的时候,变成了一个无限循环的数字。-->
<td><button @click="reduce_commdity(commodity)">-</button>{{commodity.number}}<button @click="commodity.number++;summation1()">+</button></td>
<td><input type="checkbox" @change="chooise_one();summation1()" v-model="lists" :value="commodity"></td>
</tr>
</tbody>
</table>
<p>总计:{{sum}}¥</p>
</div>
<script>
new Vue({
el: '#app',
data: {
commoditys:[{
'name':'梨子',
'price':125.6,
'number':20,
},
{
'name':'苹果',
'price':25.6,
'number':10,
},
{
'name':'土豆',
'price':5.6,
'number':30,
},
],
lists:[],
chooiseAll:'',
sum:0,
},
methods: {
chooise_all() {
if (this.chooiseAll){
this.lists = this.commoditys
} else {
this.lists = []
}
},
chooise_one() {
if (this.commoditys.length !== this.lists.length){
this.chooiseAll = false
} else {
this.chooiseAll = true
}
},
chooise_one() {
this.chooiseAll = this.commoditys.length === this.lists.length;
},
summation1() {
var sums = 0
for(i=0;i<this.lists.length;i++){
sums += this.lists[i].price * this.lists[i].number
}
this.sum = sums
},
reduce_commdity(commodity) {
var i = 0
if (commodity.number <= 1){
alert('商品数不能小于1')
} else {
commodity.number --
}
},
},
})
</script>
</body>
</html>
三、radio
针对于radio,每个选项共用一个变量,选择一个之后值会替换到变量中
<input type="radio" v-model="gender" value="1">男
<input type="radio" v-model="gender" value="2">女
<input type="radio" v-model="gender" value="0">未知
四、v-model修饰符
lazy修饰符,取代change事件
number修饰符,输入字符串转换为有效的数值型
trim修饰符,过滤字符串首尾的空格
<div id="app">
<p>lazy修饰符,取代change事件<input type="text" v-model.lazy="text1">输入:{{text1}}</p>
<p>number修饰符,输入字符串转换为有效的数值型<input type="text" v-model.number="text2">输入:{{typeof(text2)}}</p>
<p>trim修饰符,过滤字符串首尾的空格<input type="text" v-model.trim="text3">输入:{{text3}}</p>
<p><button @click="showApp1">显示app1组件</button></p>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
text1:'',
text2:'',
text3:'',
key:false,
},
methods: {
showApp1(){
this.key=!this.key
}
},
})
五、vue生命周期
vue是组件化开发,每一个组件都是一个vue对象,每个vue对象有自己的生命周期,vue从创建到销毁的整个过程就是生命周期
vue生命周期钩子函数有8个,这八个生命周期钩子函数,都在不同的时间点触发。
钩子函数 | 触发时间点 |
beforeCreate | 创建Vue实例之前调用 |
created | 创建Vue实例成功后调用(可以在此处发送异步请求后端数据) |
beforeMount | 渲染DOM之前调用 |
mounted | 渲染DOM之后调用 |
beforeUpdate | 重新渲染之前调用(数据更新等操作时,控制DOM重新渲染) |
updated | 重新渲染完成之后调用 |
beforeDestroy | 销毁之前调用 |
destroyed | 销毁之后调用 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
<child v-if="key">
<p>显示了app1</p>
</child>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
},
methods: {
},
})
Vue.component('Child', {
template: `
<p>显示了app1</p>
`,
data() {
return {
name: ''
}
},
beforeCreate(){
console.log('beforeCreate')
},
created(){
console.log('create')
this.times = setInterval(() => {
console.log('触发定时器')
},3000)
},
beforeMount(){
console.log('beforeMount')
},
mounted(){
console.log('mounted')
},
beforeUpdate(){
console.log('beforeUpdate')
},
updated(){
console.log('update')
},
beforeDestroy(){
console.log('beforeDestroy')
},
destroyed(){
clearInterval(this.times)
console.log('destroy')
},
})
</script>
</body>
</html>
六、vue与后端交互
前端与后端通信的三种方法:
在与后端的通信中如果需要使用this也就是之前的vue对象中的内容需要用箭头函数来进行
第一种js原生的fetch
fetch(api接口地址).then(此处为response).then(此处为error)
第一种使用js原生的fetch与后端交互
fetch('http://127.0.0.1:8000/api/v1/shopping/').then(data => data.json()).then(data => {
this.commoditys = data
})
fetch('http://127.0.0.1:8000/api/v1/shopping/').then(function (res){return res.json()})
第二种jQuery的ajax进行通信
$.ajax({
此处编写请求地址、类型、头、数据等,在回调函数中获取response
})
第一种使用jquery的ajax来获取后端数据
$.ajax({
'url':'http://127.0.0.1:8000/api/v1/shopping/',
'type':'get',
success: data => {
this.commoditys = data
}
})
第三种使用axios
axios.请求方式(地址,携带的数据,请求的配置).then(此为response).then(此为error)
axios.get('http://127.0.0.1:8000/api/v1/shopping/').then(data => {
console.log(data.data)
this.commoditys = data.data
})