91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue怎么實現商品購物車全選反選

發布時間:2022-04-14 10:56:44 來源:億速云 閱讀:278 作者:iii 欄目:開發技術

這篇“vue怎么實現商品購物車全選反選”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“vue怎么實現商品購物車全選反選”文章吧。

項目需求:

實現一個購物車
全選框實現對商家和商品的全選
商家全選框實現對當前商家所有商品的全選
取消其中一個商品則取消對應商家全選和全選框
選中一個商家下的所有商品則勾選對應商家的全選框,不勾選全選框
選中所有商品則勾選所有商家全選框和全選框

我的思路:

1、通過對數據的簡單操作可實現更深層次的全選操作
2、vue.$set(object, key, value)給對象添加屬性可以更新視圖
3、通過es6的every判斷數組中是否每個元素都滿足條件,都滿足返回true,有一個不滿足則返回false

template:

<div class="box">
    <input type="checkbox" v-model="checkedAll" @change="checkAll"> 全選
</div>
<div class="list"  v-for="(val,k) in data" :key="k">
    <div class="box">
        <input type="checkbox" v-model="val.checked" @change="_checkAll(val)">
        {{val.seller}}
    </div>
    <ul v-for="(item,index) in val.goodsList" :key="index">
        <li>
            <input type="checkbox" v-model="item.checked" @change="handleCheck(item,index)">
            {{item.name}}
        </li>
    </ul>
</div>

scritpt層

var app = new Vue({
    el: "#app",
    data: {
        checkedAll: false, //控制是否全選
        data: [{
            seller: "商家1",
            goodsList: [{
                name: '商品1'
            }]
        }, {
            seller: "商家2",
            goodsList: [{
                name: '商品2'
            }, {
                name: '商品3'
            }]
        }] //數據
    },
    mounted() {
        this.data.forEach(item => {
            this.$set(item, "checked", false) //Vue 解決不能檢測到對象屬性的添加或刪除
                // item.checked = false; //如果為真實數據直接設置的對象改變值不會更新視圖
            if (item.goodsList) {
                item.goodsList.forEach((citem) => {
                    this.$set(citem, "checked", false)
                        // citem.checked = false;
                })
            }
        });
    },
    methods: {
        //全選
        checkAll() {
            this.data.forEach(item => {
                item.checked = this.checkedAll;
                if (item.goodsList) {
                    item.goodsList.forEach(citem => {
                        citem.checked = this.checkedAll;
                    })
                }
            })
        },
        //商家全選
        _checkAll(val, k) {
            val.goodsList.forEach(item => {
                item.checked = val.checked;
            });
            if (this.data.every(item => item.checked)) {
                this.checkedAll = true;
            } else {
                this.checkedAll = false;
            }

        },
        //商品選擇框
        handleCheck(item, index) {
            var check = []; //保存中間層是否被選中的布爾值
            this.data.forEach((items, index) => {
                if (items.goodsList) {
                    var bool = items.goodsList.every(citem => citem.checked);
                    if (bool) {
                        items.checked = true;
                    } else {
                        items.checked = false;
                    }
                    check.push(bool);
                }
            })
            if (check.indexOf(false) == -1) {
                this.checkedAll = true;
            } else {
                this.checkedAll = false;
            }
        },
    }
})

效果如下

vue怎么實現商品購物車全選反選

以上就是關于“vue怎么實現商品購物車全選反選”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

林西县| 丰顺县| 水城县| 三河市| 崇礼县| 桃园县| 江孜县| 泸水县| 东乌珠穆沁旗| 益阳市| 新巴尔虎左旗| 依安县| 九寨沟县| 垣曲县| 隆子县| 运城市| 博爱县| 伊春市| 叙永县| 西贡区| 湾仔区| 阿合奇县| 乌拉特前旗| 琼结县| 金川县| 桃园县| 靖远县| 栾城县| 邮箱| 修文县| 长汀县| 涡阳县| 赞皇县| 陆丰市| 含山县| 甘孜| 九龙县| 阿鲁科尔沁旗| 栾川县| 芮城县| 临武县|