二、Vue实现购物车功能

news/2024/7/23 23:23:19 标签: vue

 根据表单的双向绑定,实现购物车的基本功能:

计算总价

商品增加

商品删除

全选

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>
       
    </style>
</head>
<body>
    <div id="app">
        <!--1. 全选按钮:当选择该按钮时,选中全部商品,否则全不选
            可通过布尔变量checkAll来控制

            @change="allChange": 当该按钮变化时,触发事件allChange

            注意:当有商品取消选中时,则取消全选
        -->
        全选:<input type="checkbox" @change="allChange" v-model="checkAll" />

        <!--2. 商品列表
            注意:当某个商品没有选中时,则全选按钮为未选中状态
            因此为每个选项添加事件 @change="liChange"
        -->
        <ul>
            <li v-for="data in datalist">
                <input type="checkbox" @change="liChange" v-model="group" :value="data"/>
                {{data}}

                <!--3. 为每个商品添加:减小 当前数目 增加
                    增加:可直接通过data.number++实现
                    减小:由于可能出现负值,需要调用方法subClick实现
                -->
                <button @click="subClick(data)">sub</button>
                {{data.number}}
                <button @click="data.number++">add</button>
            </li>
        </ul>
       {{group}}

       <p>商品总金额:{{getSum()}}</p>
    </div>
    
   

    <script>
        var v = new Vue({
            el: "#app",
            data:{
                checkAll:false,
                group:[],
               datalist:[
                   {
                       name:"商品1",
                       price:10,
                       number:1,
                       id:"1",
                   },
                   {
                       name:"商品2",
                       price:20,
                       number:2,
                       id:"3",
                   },
                   {
                       name:"商品3",
                       price:30,
                       number:3,
                       id:"3",
                   }
               ]
            },
            methods:{
                /*
                1.获取选中商品的总金额
                  遍历选中的商品数组group,计算总金额,并返回
                */
                getSum(){
                    var sum=0;
                    for(var i in this.group){
                        sum+=this.group[i].price*this.group[i].number
                    }
                    return sum
                },
                /*
                2.当全选按钮发生变化时
                */
                allChange(){
                    if(this.checkAll){//全选,则选中所有商品
                        this.group=this.datalist 
                    }else{//全不选
                        this.group=[]
                    }
                },

                /*
                 3. 当商品的复选按钮发生变化时

                 需调整全选按钮:
                 商品全部选中时,checkAll=true
                 否则,checkAll=false
                 只需判断选中商品数组的长度和所有商品数组的长度是否相等
                */
                liChange(){
                    if(this.group.length===this.datalist.length){//全选按钮为选中状态
                        this.checkAll=true
                    }else{//全选按钮为未选中状态
                        this.checkAll=false
                    }
                },

                /*
                4.对商品数量进行减操作
                  商品数量不能为负值
                */
                subClick(data){
                    data.number--;
                    if(data.number<0){
                        data.number=0;
                    }
                }
            }
               
        })
    </script>
</body>
</html>


http://www.niftyadmin.cn/n/1023494.html

相关文章

linux下的进程,Linux下的进程

1、查看进程&#xff1a;ps -af(系统进程&#xff1a;ps -ax)#include #include int main(){printf("Running ps with system!\n");system("ps -ax");printf("Done!\n");return 0;}2、替换进程映像exec&#xff1a;#include int main(){printf(&…

传感器 Sensor 加速度【示例】

简介坐标系x轴&#xff1a;从左到右 y轴&#xff1a;从下到上 z轴&#xff1a;从内到外这个坐标系与Android 2D API中的不同&#xff0c;传感器中的返回值都以此坐标系为准。SENSOR_TYPE_ACCELEROMETER 1 //加速度SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力SENSOR_TYPE_O…

三、Vue入门-2(fetch、axios、计算属性)

&#xff08;1&#xff09;表单修饰符 &#xff08;2&#xff09;fetch 获取json文件中的数据&#xff0c;并显示到页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" conte…

c语言简单文法

<程序>-><外部声明>|<程序><外部声明> <外部声明>-><函数定义>|<定义> <函数定义>-><函数类型说明>|<形式参数><复合语句> <函数类型说明>->void|int|float|char <形式参数>->&…

linux怎能查硬盘通电时间,查看LINUX服务器型号磁盘加电时长

有时服务器部署多年后,已经记不得服务器型号&#xff0c;但是跑机房又多有不便&#xff0c;查了下资料使用以下命令即可轻松实现显示LINUX服务器型号&#xff1a;sudo dmidecode |grep Product查看硬盘使用时长&#xff1a;需要先安装&#xff1a;yum install smartmontools -y…

四、组件化开发--1(组件定义,父传子,子传父)

&#xff08;1&#xff09;定义全局组件&#xff08;component&#xff09; 注意:组件必须要有一个父标签包裹 &#xff08;2&#xff09;定义局部组件 &#xff08;3&#xff09;组件与实例的区别 1&#xff09;注意:组件必须要有一个父标签包裹 2&#xff09;data必须是一个…

五、Vue-ref通信

&#xff08;1&#xff09;通过this&#xff0c;获取信息中包含ref &#xff08;2&#xff09;通过this.$refs.mytext.value&#xff0c;获取输入框中的值 &#xff08;3&#xff09;通过ref,父组件获取孩子组件的值&#xff08;或向孩子组件传值&#xff09; 通过this&#xf…

for循环与for in循环

json是js里的一种数据格式。var obj{a:15,b:8,c:12} json数组对象 var arr[15,8,12]; 数组alert(obj.a); ---15alert(obj[a]);---15alert(arr[0]);---15 for(var i0;i<arr.length;i){ //数组循环第一种写法 alert(i""arr[i]);}弹出&#xff1a;015 18 212 for(var…