05-vue表单绑定与购物车实例
Posted Ultraman_agul
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了05-vue表单绑定与购物车实例相关的知识,希望对你有一定的参考价值。
vue表单绑定与购物车实例
1.1 v-model在复选框中的使用
在复选框中使用v-model指令,一般会作用在一个数组上。
<div id="box">
<!--
v-model="checkArray":
checkArray:为数组,所有选中的checkbox的value都会添加到数组中,取消选中时会自动从数组中删除该value。
注意:这里一定要给checkbox添加上value属性
-->
<input type="checkbox" v-model="checkArray" value="vue"/>vue
<input type="checkbox" v-model="checkArray" value="react"/>react
<input type="checkbox" v-model="checkArray" value="node"/>node
<input type="checkbox" v-model="checkArray" value="js"/>js
<button @click="login()">提交</button>
</div>
<script>
var vm = new Vue({
el:"#box",
data : {
checkArray:[] //接收选中的checkbox的value
},
methods : {
login(){
console.log(this.checkArray);
}
}
})
</script>
运行效果
1.2 v-model在单选框中的使用
在单选框中使用v-model指令,模型定义为一个字符串即可。
<div id="app">
<form action="">
<input type="radio" v-model='selectedValue' name="football" id="" value='足球'>足球
<input type="radio" v-model='selectedValue' name="basketball" id="" value='篮球'>篮球
<input type="radio" v-model='selectedValue' name="ppball" id="" value='乒乓球'>乒乓球
<input type="radio" v-model='selectedValue' name="ymball" id="" value='羽毛球'>羽毛球
</form>
<button @click='showData'>按钮</button>
</div>
<script src='./js/vue.js'></script>
<script>
new Vue({
el: '#app',
data: {
selectedValue: ''
},
methods: {
showData() {
console.log(this.selectedValue)
}
},
})
</script>
运行效果
1.3 综合案例:购物车
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 引入vue.js -->
<script src="js/vue.js"></script>
<style>
#box ul{
list-style: none;
width: 60%;
margin: auto;
border: 1px solid black;
padding: 10px;
}
#box ul li{
display: flex;
justify-content: space-around;
margin-top: 10px;
border-bottom: 1px dashed #cccccc;
}
#box ul li:last-child{
border-bottom: none;
}
#box ul li img{
width: 100px;
}
.all{
width: 60%;
margin: auto;
}
</style>
</head>
<body>
<div id="box">
<div class="all" v-if="list.length === 0">购物车空空如也</div>
<template v-else>
<div class="all"><input type="checkbox" v-model="isChecked" @change="allCheck()">全选|全不选</div>
<ul>
<li v-for="(item,index) in list" :key="item.id">
<div>
<!-- 将事件商品对象item绑定到value中,当选中当前商品时,item作为元素保存在checkGroup数组中,方便后面计算时使用 -->
<input type="checkbox" v-model="checkGroup" :value="item" @change="isAllCheck()"/>
</div>
<div>
<img :src="item.pic" alt="">
</div>
<div>
<div>名称:{{item.name}}</div>
<div>价格:¥{{item.price}}</div>
</div>
<div>
<button @click="item.number--" :disabled="item.number===1">-</button>
<span>{{item.number}}</span>
<button @click="item.number++" :disabled="item.number===item.limit">+</button>
</div>
<div>
<button @click="deleteGood(index,item.id)">删除</button>
</div>
</li>
</ul>
<div class="all">总金额: {{totalPrice()}}</div>
</template>
</div>
<script>
var vm = new Vue({
el:"#box",
data:{
isChecked:false,
checkGroup:[],
list:[
{
name:"商品1",
price:10,
number:1,
id:1,
limit:5,//限购
pic:"https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1689157983,3552298815&fm=26&gp=0.jpg"
},
{
name:"商品2",
price:20,
number:5,
id:2,
limit:8,//限购
pic:"https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1689157983,3552298815&fm=26&gp=0.jpg"
},
{
name:"商品3",
price:30,
number:10,
id:3,
limit:15,//限购
pic:"https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1689157983,3552298815&fm=26&gp=0.jpg"
},
{
name:"商品4",
price:8,
number:6,
id:4,
limit:18,//限购
pic:"https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1689157983,3552298815&fm=26&gp=0.jpg"
},
{
name:"商品5",
price:14,
number:2,
id:5,
limit:7,//限购
pic:"https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1689157983,3552298815&fm=26&gp=0.jpg"
}
]
},
methods:{
totalPrice(){
var total = 0;
this.checkGroup.forEach((ele)=>{
total += ele.price * ele.number;
})
return total
},
//删除商品
deleteGood(index,goodId){
//删除原商品
this.list.splice(index,1);
//更新选中的商品
this.checkGroup = this.checkGroup.filter(ele => ele.id !== goodId)
//删除单个商品时也要检测是否全部被选中
this.isAllCheck();
},
//全选全不选
allCheck(){
if(this.isChecked){
this.checkGroup = this.list
}else{
this.checkGroup = [];
}
},
//选择单个商品时,判断是否为全部选中
isAllCheck(){
if(this.checkGroup.length === this.list.length){
this.isChecked = true;
}else{
this.isChecked = false;
}
}
}
})
</script>
</body>
</html>
1.4 表单修饰符:
- .lazy:失去焦点时再更新数据
<div id="box">
<!-- .lazy:失去焦点后才更新myVal的值 -->
<input type="text" v-model.lazy="myVal">|{{myVal}}|
<button @click="handelTest()">test</button>
</div>
<script>
var vm = new Vue({
el:"#box",
data:{
myVal : 8
},
methods:{
handelTest(){
console.log(this.myVal);
console.log(typeof this.myVal);
}
}
})
</script>
- .number:将value转换成number类型的值
<div id="box">
<!-- .number修饰符,将input的value转换成了数字 -->
<input type="text" v-model.number="myVal">|{{myVal}}|
<button @click="handelTest()">test</button>
</div>
- .trim:去年value前后空格
<div id="box">
<input type="text" v-model.trim="myVal">|{{myVal}}|
<button @click="handelTest()">test</button>
</div>
以上是关于05-vue表单绑定与购物车实例的主要内容,如果未能解决你的问题,请参考以下文章