首页 > 其他 > 详细

《Vue.j实战》一书 p54 页练习1和练习2试做

时间:2019-07-31 16:54:51      阅读:229      评论:0      收藏:0      [点我收藏+]

《Vue.j实战》一书 p54 页练习1和练习2:

练习1 : 在当前示例基础上扩展商品列表,新增一项是否选中该商品的功能,总价变为只计算选中商品的总价,同时提供一个全选的按钮。

练习2 : 将商品列表list 改为一个二维数组来实现商品的分类,比如可分为“电子产品”“生活用品”和“果蔬” ,同类商品聚合在一起。提示,你可能会用到两次v -for。

Demo浏览地址:https://sx00xs.github.io/test/46/index.html

文件格式:.vue

 

<template>
    <div id="app">
        <template v-if="list.length">
            <table>
                <thead>
                    <tr>
                        <th></th>
                        <th>商品类别</th>
                        <th>商品名称</th>
                        <th>商品单价</th>
                        <th>购买数量</th>
                        <th>操作</th>
                        <th>是否选中</th>
                        <th>
                            <button @click="handleSelectall">{{message}}</button>
                        </th>
                    </tr>
                </thead>
                <tbody>
                    <template v-for="(item, index) in list">
                        <tr v-for="(subitem, subindex) in item" :key="subitem.ke">
                            <td>{{subitem.id}}</td>
                            <td>{{subitem.category}}</td>
                            <td>{{subitem.name}}</td>
                            <td>{{subitem.price}}</td>
                        <td>
                            <button
                            @click="handleReduce(index,subindex)"
                            :disabled="subitem.count === 1">-</button>
                            {{subitem.count}}
                            <button @click="handleAdd(index,subindex)">+</button>
                        </td>
                        <td>
                            <button @click="handleRemove(index,subindex)">移除</button>
                        </td>
                        <td>
                            <input type="checkbox" v-model="subitem.isChecked">
                        </td>
                        </tr>
                    </template>
                </tbody>
            </table>
            <div>总价:¥ {{ totalPrice }}</div>
        </template>
        <div v-else>购物车为空</div>
    </div>
</template>
<script>

export default {    
    data(){
        return{
            message:‘全选‘,
            list:[
                [
                {
                    id:1,
                    category:‘电子产品‘,
                    ke:‘a‘,
                    name:‘iPhone 7‘,
                    price:6188,
                    count:1,
                    isChecked:true
                },
                {
                    id:2,
                    category:‘电子产品‘,
                    ke:‘b‘,
                    name:‘iPad Pro‘,
                    price:5888,
                    count:1,
                    isChecked:true
                },
                {
                    id:3,
                    category:‘电子产品‘,
                    ke:‘c‘,
                    name:‘MacBook Pro‘,
                    price:21488,
                    count:1,
                    isChecked:true
                }
                ],
                [
                {
                    id:4,
                    category:‘生活用品‘,
                    ke:‘d‘,
                    name:‘牙膏‘,
                    price:29,
                    count:1,
                    isChecked:true
                },
                {
                    id:5,
                    category:‘生活用品‘,
                    ke:‘e‘,
                    name:‘纸巾‘,
                    price:19,
                    count:1,
                    isChecked:true
                },
                {
                    id:6,
                    category:‘生活用品‘,
                    ke:‘f‘,
                    name:‘衣架‘,
                    price:33,
                    count:1,
                    isChecked:true
                }
                ],
                [
                {
                    id:7,
                    category:‘果蔬‘,
                    ke:‘g‘,
                    name:‘苹果‘,
                    price:13,
                    count:1,
                    isChecked:true
                },
                {
                    id:8,
                    category:‘果蔬‘,
                    ke:‘h‘,
                    name:‘葡萄‘,
                    price:25,
                    count:1,
                    isChecked:true
                },
                {
                    id:9,
                    category:‘果蔬‘,
                    ke:‘i‘,
                    name:‘西红柿‘,
                    price:5,
                    count:1,
                    isChecked:true
                }
                ],
            ]
        }
    },
    computed:{
        totalPrice(){
            var total = 0;
            for(var i=0;i<this.list.length;i++){
                for(var j=0;j<this.list[i].length;j++){
                    var item = this.list[i][j];
                    if(item.isChecked){
                        total += item.price * item.count;
                    }
                }
            }
            return total.toString().replace(/\B(?=(\d{3})+$)/g,‘,‘);

        }
    },
    methods:{
        handleReduce(index,subindex){
            if(this.list[index][subindex].count === 1) return;
            this.list[index][subindex].count--;
        },
        handleAdd(index,subindex){
            this.list[index][subindex].count++
        },
        handleRemove(index,subindex){
            //this.list.splice(index,1);
            this.list[index].splice(subindex,1);
        },
        handleSelectall(){
            for(var i=0;i<this.list.length;i++){
                for(var j=0;j<this.list[i].length;j++){
                    this.list[i][j].isChecked=true;
                }
            }
        }
    }
    
}
</script>

 

《Vue.j实战》一书 p54 页练习1和练习2试做

原文:https://www.cnblogs.com/sx00xs/p/11277072.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!