10 vue之表单控制+购物车案列

1 checkbox

如果只有一个checkbox,绑定的值就是true和false

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="app">

   <input type="text" placeholder="请输入用户名:"><br>
    <input type="password" placeholder="请输入密码:"><br>
    <input type="checkbox" v-model="radio">记住用户名

</div>
</body>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            radio:false
        },

    })
</script>
</html>

 

 

2 单选

radio单选,是字符串,选中谁,字符串就变成选中的value值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>单选</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box">
    <input type="radio" v-model="radio" value=""><input type="radio" v-model="radio" value=""><input type="radio" v-model="radio" value="保密">保密
    <br><br>您选择的性别:{{radio}}
</div>
</body>
<script>
    var vm = new Vue({
        el: '#box',
        data: {
            radio: '',
        },

    })
</script>
</html>

 

 

 

 

3 多选

checkbox多选,绑定的值是数组,选择以后,数组中放选中的value值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>多选</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
</head>
<body>
<div id="box">

    <input type="checkbox" v-model="many" value="篮球">篮球
    <input type="checkbox" v-model="many" value="足球">足球
    <input type="checkbox" v-model="many" value="棒球">棒球
    <input type="checkbox" v-model="many" value="桌球">桌球
    <br><br>您喜欢的球类:{{many}}
</div>
</body>
<script>
    var vm = new Vue({
        el: '#box',
        data: {
            many: [],
        },
    })
</script>
</html>

 

 

 

 

4 购物车案例 - 结算

let定义的变量只在当前作用域有效,var定义的变量:console.log(a) var a=10在python中不允许,但是在js中允许,用var定义的有个作用域,在函数外部定义的在函数内部也能用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
    <style>
        table, td {
            border: 1px solid black;
            text-align: center;
        }
    </style>
</head>
<body>

<div id="app">
    <table>
        <tr>
            <td>商品名称</td>
            <td>价格</td>
            <td>数量</td>
            <td>选择</td>
        </tr>
        <tr v-for="item in dataList">
            <td>item.name</td>
            <td>{{item.price}}</td>
            <td>{{item.number}}</td>
            <td><input type="checkbox" v-model="checkGroup" :value="item"></td>     //:value="item"绑定的是变量
        </tr>
    </table>

    <br>已选商品:{{checkGroup}}
    <br>总价:{{getPrice()}}
</div>


</body>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            dataList:[
                {name: '今瓶没', price: 99, number: 2},
                {name: '西柚记', price: 59, number: 1},
                {name: '水壶转', price: 89, number: 5},
            ],
            checkGroup: [],
        },
        methods: {
            getPrice(){
                let sum_price = 0
                for (let i in this.checkGroup) {    // 这里的 i 是索引
                    sum_price += this.checkGroup[i]['number'] * this.checkGroup[i]['price']
                }
                return sum_price
            }
        }
    })
</script>
</html>
 

 

5 购物车案例 - 全选/全不选

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
    <style>
        table, td {
            border: 1px solid black;
            text-align: center;
        }
    </style>
</head>
<body>

<div id="app">
    <table>
        <tr>
            <td>商品名称</td>
            <td>价格</td>
            <td>数量</td>
            <td>选择 <input type="checkbox" v-model="checkAll" @change="handleAll"></td>
        </tr>
        <tr v-for="item in dataList">
            <td>item.name</td>
            <td>{{item.price}}</td>
            <td>{{item.number}}</td>
            <td><input type="checkbox" v-model="checkGroup" :value="item" @change="handleOne"></td>
        </tr>
    </table>

    <br>已选商品:{{checkGroup}}
    <br>总价:{{getPrice()}}
</div>


</body>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            dataList:[
                {name: '今瓶没', price: 99, number: 2},
                {name: '西柚记', price: 59, number: 1},
                {name: '水壶转', price: 89, number: 5},
            ],
            checkGroup: [],
            checkAll:false,
        },
        methods: {
            getPrice(){
                let sum_price = 0
                for (let i in this.checkGroup) {    // 这里的 i 是索引
                    sum_price += this.checkGroup[i]['number'] * this.checkGroup[i]['price']
                }
                return sum_price
            },
            handleAll(){
                if(this.checkAll){
                    this.checkGroup=this.dataList
                }else {
                    this.checkGroup=[]
                }
            },
            handleOne(){
                if (this.checkGroup.length==this.dataList.length){
                    this.checkAll=true
                }else {
                    this.checkAll=false
                }
            },
        }
    })
</script>
</html>

6 购物车案例 - 数量加减

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.3/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="row">
    <div id="app" class="col-md-4 offset-md-1 text-center mt-5 ">
        <table class="table table-bordered">
            <thead>
            <tr>
                <td>商品名称</td>
                <td>价格</td>
                <td>数量</td>
                <td>选择 <input type="checkbox" v-model="checkAll" @change="handleAll"></td>
            </tr>
            </thead>
            <tbody>
            <tr v-for="item in dataList">
                <td>item.name</td>
                <td>{{item.price}}</td>
                <td>
                    <button class="btn link btn-sm" @click="handleReduce(item)">-</button>
                    {{item.number}}
                    <button class="btn link btn-sm" @click="item.number++">+</button>
                </td>
                <td><input type="checkbox" v-model="checkGroup" :value="item" @change="handleOne"></td>
            </tr>
            <tr class="text-left">
                <td colspan="4">总价:{{getPrice()}}
            </tr>
            </tbody>
        </table>
    </div>
</div>


</body>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            dataList: [
                {name: '今瓶没', price: 99, number: 2},
                {name: '西柚记', price: 59, number: 1},
                {name: '水壶转', price: 89, number: 5},
            ],
            checkGroup: [],
            checkAll: false,
        },
        methods: {
            getPrice() {
                let sum_price = 0
                for (let i in this.checkGroup) {    // 这里的 i 是索引
                    sum_price += this.checkGroup[i]['number'] * this.checkGroup[i]['price']
                }
                return sum_price
            },
            handleAll() {
                if (this.checkAll) {
                    this.checkGroup = this.dataList
                } else {
                    this.checkGroup = []
                }
            },
            handleOne() {
                if (this.checkGroup.length == this.dataList.length) {
                    this.checkAll = true
                } else {
                    this.checkAll = false
                }
            },
            handleReduce(item) {
                if (item.number == 1) {
                    item.number = 1
                }else {
                    item.number--
                }
            },
        }
    })
</script>
</html>
 

 课堂案列

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div class="app">
    <table border="1">
        <tr>
            <td>商品名称</td>
            <td>商品价格</td>
            <td>商品数量</td>
            <td>选中/不选中 <input type="checkbox" v-model="checkAll" @change="handelCheckALL"></td>
        </tr>
        <tr v-for="item in good_list">
            <td>{{item.name}}</td>
            <td>{{item.price}}</td>
            <td><button @click="handleDown(item)">-</button>{{item.count}} <button @click="item.count++">+</button></td>
            <td><input type="checkbox" v-model="checkGroup" :value="item" @change="checkOne"></td>
        </tr>
    </table>

    <h2>您选中的商品有:{{checkGroup}}</h2>
    <h2>总价格为(由于数据的双向绑定,只要变量变了,页面也会变):{{getPrice()}}</h2>
<!--    <h3>{{checkAll}}</h3>-->


</div>

</body>
<script>
    var vm = new Vue({
        el: '.app',
        data: {
            good_list: [
                {name: '特斯拉', price: 102304, count: 2},
                {name: '钢笔', price: 6, count: 3},
                {name: '鸡蛋', price: 2, count: 5},
                {name: '鞋子', price: 299, count: 7},
                {name: '衬衣', price: 189, count: 4},
            ],
            checkGroup: [],
            checkAll:false

        },
        methods: {
            getPrice() {
                // 计算选中的商品总价格
                let totalPrice = 0
                // 1 js老循环方式(按索引循环)
                // for (i = 0; i < this.checkGroup.length; i++) {
                //     totalPrice += this.checkGroup[i].price * this.checkGroup[i].count
                // }

                //2 js的按迭代循环  【i是数组的索引值】
                for (i in this.checkGroup) {
                    // console.log(i)
                    totalPrice += this.checkGroup[i].price * this.checkGroup[i].count
                }

                return totalPrice
            },
            handelCheckALL(){
                //一个是全选了,一个是全不选
                if(this.checkAll){
                    this.checkGroup=this.good_list
                }else {
                    this.checkGroup=[]
                }

            },
            checkOne(){
                if(this.checkGroup.length==this.good_list.length){
                    //全选
                    this.checkAll=true

                }else {
                    this.checkAll=false
                }

            },
            handleDown(item){
                if(item.count>1){
                    item.count--
                }else {
                    alert('太少了,我受不了了')
                }
            }
        }
    })
</script>
</html>

 

 


 

 

posted @ 2022-02-11 20:48  甜甜de微笑  阅读(58)  评论(0编辑  收藏  举报