最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vuex實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車(chē)功能

 更新時(shí)間:2022年04月26日 16:59:24   作者:UIEngineer  
這篇文章主要為大家詳細(xì)介紹了vuex實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車(chē)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了vuex實(shí)現(xiàn)購(gòu)物車(chē)功能的具體代碼,供大家參考,具體內(nèi)容如下

文件目錄如下:

購(gòu)物車(chē)組件

<template>
    <div>
        <h1>vuex-shopCart</h1>
        <div class="shop-listbox">
            <shop-list />
        </div>
        <h2>已選商品</h2>
        <div class="shop-cartbox">
            <shop-cart />
        </div>
    </div>
</template>

<script>
import shoList from './shop-list'
import shopCart from './shop-cart'

export default {
  name: 'shop',
  components: {
      'shop-list' : shoList,
      'shop-cart' : shopCart
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

商品列表

<template>
    <div class="shop-list">
        <table>
            <tr class="shop-listtitle">
                <td>id</td>
                <td>名稱(chēng)</td>
                <td>價(jià)格</td>
                <td>操作</td>
            </tr>
            <tr v-for = "item in shopList" class="shop-listinfo" :key="item.id">
                <td>{{item.id}}</td>
                <td>{{item.name}}</td>
                <td>{{item.price}}</td>
                <td>
                    <button @click="addToCart(item)">加入購(gòu)物車(chē)</button>
                </td>
            </tr>
        </table>
    </div>
</template>

<script>
import {mapGetters,mapActions} from "vuex";
export default {
    name : 'shopList',
    computed: {
        ...mapGetters({
                shopList:'getShopList',
            })
    },
    methods: {
        ...mapActions(['addToCart'])
    },
}
</script>

選中商品列表

<template>
    <div class="shop-list">
        <table>
            <tr class="shop-listtitle">
                <td>id</td>
                <td>名稱(chēng)</td>
                <td>價(jià)格</td>
                <td>數(shù)量</td>
                <td>操作</td>
            </tr>
            <tr v-for="item in cartData" class="shop-listinfo" :key="item.id">
                <td>{{item.id}}</td>
                <td>{{item.name}}</td>
                <td>{{item.price}}</td>
                <td>{{item.num}}</td>
                <td><button class="shop-dele dele-btn" @click="deleteShop(item)">刪除</button></td>
            </tr>
            <tr v-if="cartData.length <= 0">
                <td colspan="5">暫無(wú)數(shù)據(jù)</td>
            </tr>
            <tr>
                <td colspan="2">總數(shù):{{totalNum}}</td>
                <td colspan="2">總價(jià)格:{{totalPrice}}</td>
                <td><button class="dele-cart dele-btn" @click="clearCart">清空購(gòu)物車(chē)</button></td>
            </tr>
        </table>
    </div>
</template>

<script>
import {mapGetters,mapActions} from 'vuex'
export default {
    name : 'shopCart',
    data(){
        return{
            
        }
    },
    computed: {
        ...mapGetters({
            cartData:'addShopList',
            totalNum : 'totalNum',
            totalPrice:'totalPrice'
        })
    },
    methods: {
        ...mapActions({
            clearCart:'clearToCart',
            deleteShop:"deletToShop"
        })
    }
}
</script>

vuex 創(chuàng)建

npm install vuex --save,創(chuàng)建vuex文件夾,在文件夾中創(chuàng)建store.js,引入vuex;

store.js

import Vue from "vue"
import Vuex from 'vuex'
import cart from './modules/cart'

Vue.use(Vuex)

export default new Vuex.Store({
    modules: {
        cart
    }
})

建立一個(gè)模塊文件夾modules,里面創(chuàng)建創(chuàng)建當(dāng)個(gè)store模塊,然后默認(rèn)輸出,在store.js中引入;

cart.js

const state = {
    shop_list: [{
        id: 11,
        name: '魚(yú)香肉絲',
        price : 12
    }, {
            id: 22,
            name: '宮保雞丁',
            price : 14
        }, {
            id: 34,
            name: '土豆絲',
            price : 10
        }, {
            id: 47,
            name: '米飯',
            price : 2
        }, {
            id: 49,
            name: '螞蟻上數(shù)',
            price : 13
        }, {
            id: 50,
            name: '臘肉炒蒜薹',
            price : 15
        }],
        add : []
}

const getters = {
    // 獲取商品列表
    getShopList: state => state.shop_list,
    // 獲取購(gòu)物車(chē)列表
    addShopList: state => {
        // map()方法返回一個(gè)新數(shù)組,數(shù)組中的元素為原始數(shù)組元素調(diào)用函數(shù)處理后的值
        return state.add.map(({ id, num }) => {
            let product = state.shop_list.find(n => n.id == id)// find()方法返回通過(guò)測(cè)試(函數(shù)內(nèi)判斷)的數(shù)組的第一個(gè)元素的值,如果沒(méi)有符合條件的元素返回undefined
            if (product) {//    如果存在該商品
                return {//  返回對(duì)象
                    ...product,
                    num
                }
            }
        })
    },
     // 獲取總數(shù)量
     totalNum: (state, getters) => {
         let total = 0
         getters.addShopList.map(n => { 
             total += n.num
         })
         return total
    },
    // 計(jì)算總價(jià)格
    totalPrice: (state, getters) => { 
        let total = 0
        getters.addShopList.map(n => { 
            total += n.num * n.price
        })
        return total
    }
},

const actions = {
    // 加入購(gòu)物車(chē)
    addToCart({ commit},product) { 
        commit('addCart', {
            id : product.id
        })
    },
    // 清空購(gòu)物車(chē)
    clearToCart({ commit}) { 
        commit('clearCart')
    },
    // 刪除單個(gè)物品
    deletToShop({ commit},product) { 
        commit('deletShop',product)
    }
}

const mutations = {
    // 加入購(gòu)物車(chē)
    addCart(state, { id}){ 
        let record = state.add.find(n => n.id == id)
        if (!record) {//   如果購(gòu)物車(chē)中不存在該商品
            state.add.push({//  追加商品
                id,
                num : 1
            })
        } else { // 如果商品已經(jīng)加入購(gòu)物車(chē),則改變數(shù)量
            record.num++
        }
    },
    // 刪除單個(gè)物品
    deletShop(state, product) { 
        state.add.forEach((item,i) => { 
            if (item.id == product.id) {//  如果找到該商品 
                state.add.splice(i,1)
            }
        })
    },
    // 清空購(gòu)物車(chē)
    clearCart(state) { 
        state.add = []
    }
}

export default {
    state,
    getters,
    actions,
    mutations
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue3源碼分析reactivity實(shí)現(xiàn)方法示例

    Vue3源碼分析reactivity實(shí)現(xiàn)方法示例

    這篇文章主要為大家介紹了Vue3源碼分析reactivity實(shí)現(xiàn)方法原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Element MessageBox彈框的具體使用

    Element MessageBox彈框的具體使用

    這篇文章主要介紹了Element MessageBox彈框的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • element-ui配合node實(shí)現(xiàn)自定義上傳文件方式

    element-ui配合node實(shí)現(xiàn)自定義上傳文件方式

    這篇文章主要介紹了element-ui配合node實(shí)現(xiàn)自定義上傳文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 在antd Table中插入可編輯的單元格實(shí)例

    在antd Table中插入可編輯的單元格實(shí)例

    這篇文章主要介紹了在antd Table中插入可編輯的單元格實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • vue3中各種類(lèi)型文件進(jìn)行預(yù)覽功能實(shí)例

    vue3中各種類(lèi)型文件進(jìn)行預(yù)覽功能實(shí)例

    在vue移動(dòng)端項(xiàng)目中經(jīng)常遇到這樣的需求,對(duì)一些上傳的附件可以點(diǎn)擊之后在線(xiàn)預(yù)覽,所以下面這篇文章主要給大家介紹了關(guān)于vue3中各種類(lèi)型文件進(jìn)行預(yù)覽功能的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Vue3中集成高德地圖并實(shí)現(xiàn)平移縮放功能

    Vue3中集成高德地圖并實(shí)現(xiàn)平移縮放功能

    隨著前端技術(shù)的不斷發(fā)展,地圖應(yīng)用在我們的項(xiàng)目中越來(lái)越常見(jiàn),本文將介紹如何在Vue3項(xiàng)目中集成高德地圖,并通過(guò)簡(jiǎn)單的配置實(shí)現(xiàn)地圖的平移和縮放功能,需要的朋友可以參考下
    2024-09-09
  • 淺談在Vue-cli里基于axios封裝復(fù)用請(qǐng)求

    淺談在Vue-cli里基于axios封裝復(fù)用請(qǐng)求

    這篇文章主要介紹了淺談在Vue-cli里基于axios封裝復(fù)用請(qǐng)求,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • 使用Nuxt.js改造已有項(xiàng)目的方法

    使用Nuxt.js改造已有項(xiàng)目的方法

    這篇文章主要介紹了使用Nuxt.js改造已有項(xiàng)目的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 使用elementUI table展開(kāi)行內(nèi)嵌套table問(wèn)題

    使用elementUI table展開(kāi)行內(nèi)嵌套table問(wèn)題

    這篇文章主要介紹了使用elementUI table展開(kāi)行內(nèi)嵌套table問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue實(shí)現(xiàn)一拉到底的滑動(dòng)驗(yàn)證

    vue實(shí)現(xiàn)一拉到底的滑動(dòng)驗(yàn)證

    這篇文章主要為大家詳細(xì)介紹了vue簡(jiǎn)單的一拉到底的滑動(dòng)驗(yàn)證,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評(píng)論

会东县| 工布江达县| 遵化市| 枣庄市| 兴安盟| 壶关县| 阿尔山市| 江阴市| 金平| 那曲县| 平塘县| 洱源县| 剑阁县| 鄂尔多斯市| 津南区| 丹棱县| 彭水| 东安县| 克东县| 房产| 武汉市| 务川| 方城县| 武义县| 北京市| 宁津县| 定结县| 图们市| 云林县| 南丹县| 梅河口市| 彭州市| 西丰县| 菏泽市| 雅江县| 九寨沟县| 洛隆县| 涞源县| 邢台市| 南皮县| 外汇|