观察者设计模式在前端项目实例

观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。

实例场景:在点餐主页面菜单列表与购物车列表都可以对购物车进行增减,点餐页面的计算总金额下拉栏组件、购物车组件、列表组件都用到所选购物车数据,如何在一处操作数据就能各出同时相应?可以使用观察者设计模式思想,封装购物车数据对象,当对象改变时,主动刷新数据
在这里插入图片描述

在这里插入图片描述

//购物车列表操作
function shoppingCart(item,type,merge) {
    let shoppingCart = wx.getStorageSync('shoppingCart') || [];
    let index = null ;
    // 不用选择规格,就直接比较id是否相同
    if (item.specCategoryList.length === 0) {
         index = shoppingCart.findIndex((n) =>{
            return item.id === n.id
         });
    }else {
        index = shoppingCart.findIndex((n) =>{
            return item.id === n.id && n.checkoutList && ArrayIsEqual(item.checkoutList,n.checkoutList)
        });
    }
    if(type === 'add') {
        if(index === -1) {
            item.count = 1;
            shoppingCart.push(item)
        }else {
            if(merge) {
                shoppingCart[index].count+= item.count;
            } else {
                shoppingCart[index].count ++;
            }

        }
    }else if(type === 'del') {
        if(index === -1) {
            return;
        }else if(shoppingCart[index].count === 1){
            shoppingCart.splice(index,1)
        }else {
            shoppingCart[index].count --
        }
    }
    wx.setStorageSync('shoppingCart', shoppingCart)
    
}

手动刷新相应处理后的数据

 //处理数据
    handleData (data) {
        let shoppingCart = wx.getStorageSync('shoppingCart') || [];
        data.forEach(item => {
            let count = 0;
            item.records.forEach(record => {
                record.count = 0;
                let list  = shoppingCart.filter((n) =>{
                    return n.id === record.id
                });
                if(!list){
                    record.count = 0

                }else  {
                    for(let i= 0; i<list.length; i++){
                        record.count+= list[i].count
                    }
                }
                count += record.count
            });
            item.checkNumber = count;
        });
        this.setData({
            menuList: data
        });
        this.getTotalPriceAndNum();
    },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值