vue监听购物车数量和金额变化以及物品模糊查询

简单的html 没有写样式

<div>
        <div>
            <input type="text" placeholder="请输入" v-model="input">
        </div>
        <table>
            <thead>
                <tr>
                    <td>名称</td>
                    <td>数量</td>
                    <td>总量</td>
                    <td>单价</td>
                    <td>总价</td>
                </tr>
            </thead>
            <tbody>
                <tr v-for="(item,i) in itemData" :key="i">
                    <td>{{item.name}}</td>
                    <td>
                        <button :disabled="item.num == 1" @click="item.num-=1">-</button>
                        <span>{{item.num}}</span>
                        <button :disabled="item.num == item.nums" @click="item.num+=1">+</button>
                    </td>
                    <td>{{item.nums}}</td>
                    <td>{{priceFil(item.price,2)}}</td>
                    <td>{{priceFil(item.num * item.price,2) }}</td>
                </tr>
            </tbody>
        </table>
        <div>
            总计{{commoditySum}}件,一共{{priceFil(grossAmount,2)}}元
        </div>
    </div>
export default {
    data() {
        return {
            input:'',
            items:[ 
                {
                 price:10,
                 nums:10, 
                 num:1,
                 name:'长袖'
                },
                {
                 price:10,
                 nums:10, 
                 num:1, 
                 name:'短袖'
                },
                {
                 price:10,
                 nums:10, 
                 num:1, 
                 name:'裙子'
                }
            ]
        }
    },
    filter:{
        
    },
    computed:{
        commoditySum:function(){
            // 购物车商品的总件数,用了两种方法,用reduce看起来比较简洁
            // let num = 0;
            // this.itemData.forEach(item => {
            //     num += item.num;
            // });
            // return num;
            return this.itemData.reduce((total,num)=>{
                return total += num.num;
            },0);
        },
        grossAmount:function(){
        	//这是计算商品的总价格
            // let num = 0;
            // this.itemData.forEach(item => {
            //     num += item.num * num.price;
            // });
            // return num;
            return this.itemData.reduce((total,num)=>{
                return total += num.num * num.price;
            },0);
        },
        itemData:function(){
        	//先判断input框有没有输入内容,如果没有输入内容就返回所有的商品数据
            if(!this.input) return this.items;
            //filter方法会创建一个新的数组所以这样写会比较简洁
            //也可以定义一个空数组然后循环所有的商品,然后判断满足条件的就push到空数组里面 最后return          定义的数组
            return this.items.filter((item,i)=>{
            	//使用indexOf的话就需要判断一下返回的结果是不是-1,因为includes返回的结果就是true或者false所以不需要判断
                return item.name.indexOf(this.input) != -1;
                // return item.name.includes(this.input);
            });
        }
    },
    methods:{
    	//第二个参数是需要保留多少位小数,这是根据项目需求来的
        priceFil:(data,num)=>{
        	//如果大多都是需要保留两位小数可以给一个默认值,这样就不用每次都传参数
       		//if(!num) num = 2;
            return '¥' + data.toFixed(num);
        }
    }
}

因为vue3.x不支持过滤器 所以文本转换是用自己定义的方法

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值