uni-app开发小程序,笔记记录7 加入购物车

本文介绍了如何在微信小程序中使用Vuex进行状态管理,特别是针对购物车功能的实现。内容包括创建store文件,设置命名空间,导入和挂载购物车模块,使用mapState、mapMutations和mapGetters处理数据,以及实现购物车数据的本地持久化存储和动态更新tabBar徽标。
摘要由CSDN通过智能技术生成

学习地址
零基础玩转微信小程序:黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署)
uniapp - 黑马优购 笔记地址

知识点
1 使用vuex
1 创建 store 文件夹
2 创建 store.js
在这里插入图片描述

// 1. 导入 Vue 和 Vuex
// import Vue from 'vue'  vue3 不需要
import Vuex from 'vuex'

// 2. 将 Vuex 安装为 Vue 的插件 vue3 不需要
// Vue.use(Vuex)

// 3. 创建 Store 的实例对象
const store = new Vuex.Store({
   
  // TODO:挂载 store 模块
  modules: {
   },
})

// 4. 向外共享 Store 的实例对象
export default store

在 main.js 中导入 store 实例对象并挂载到 Vue 的实例上:

// 1. 导入 store 的实例对象
import store from './store/store.js'

// 省略其它代码...

// #ifdef VUE3
import {
    createSSRApp } from 'vue'
export function createApp() {
   
  const app = createSSRApp(App)
  // 2. 将 store 挂载到 Vue 实例上
  app.use(store)
  return {
   
    app
  }
}
// #endif

创建购物车的 store 模块
在这里插入图片描述

export default {
   
  // 为当前模块开启命名空间
  namespaced: true,

  // 模块的 state 数据
  state: () => ({
   
    // 购物车的数组,用来存储购物车中每个商品的信息对象
    // 每个商品的信息对象,都包含如下 6 个属性:
    // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
    cart: [],
  }),

  // 模块的 mutations 方法
  mutations: {
   },

  // 模块的 getters 属性
  getters: {
   },
}

在 store/store.js 模块中,导入并挂载购物车的 vuex 模块,示例代码如下:

import Vue from 'vue'
import Vuex from 'vuex'
// 1. 导入购物车的 vuex 模块
import moduleCart from './cart.js'

Vue.use(Vuex)

const store = new Vuex.Store({
   
  // TODO:挂载 store 模块
  modules: {
   
    // 2. 挂载购物车的 vuex 模块,模块内成员的访问路径被调整为 m_cart,例如:
    //    购物车模块中 cart 数组的访问路径是 m_cart/cart
    m_cart: moduleCart,
  },
})

export default store

在 store/store.js 模块中,导入并挂载购物车的 vuex 模块,示例代码如下:

// 1. 导入 Vue 和 Vuex
// import Vue from 'vue'  vue3 不需要
import Vuex from 'vuex'

// 1 导入购物车的vuex模块
import moduleCart from './cart.js' 

// 2. 将 Vuex 安装为 Vue 的插件 vue3 不需要
// Vue.use(Vuex)


// 3. 创建 Store 的实例对象
const store = new Vuex.Store({
   
  // TODO:挂载 store 模块
    modules: {
   
      // 2. 挂载购物车的 vuex 模块,模块内成员的访问路径被调整为 m_cart,例如:
      //    购物车模块中 cart 数组的访问路径是 m_cart/cart
      m_cart: moduleCart,
    },
})

// 4. 向外共享 Store 的实例对象
export default store

在 goods_detail.vue 页面中,修改 标签中的代码如下:

// 从 vuex 中按需导出 mapState 辅助方法
import {
    mapState } from 'vuex'

export default {
   
  computed: {
   
    // 调用 mapState 方法,把 m_cart 模块中的 cart 数组映射到当前页面中,作为计算属性来使用
    // ...mapState('模块的名称', ['要映射的数据名称1', '要映射的数据名称2'])
    ...mapState('m_cart', ['cart']),
  },
  // 省略其它代码...
}
注意:今后无论映射 mutations 方法,还是 getters 属性,还是 state 中的数据,都需要指定模块的名称,才能进行映射。

使用测试

  <!-- 运费 -->
 <view class="yf">快递:免运费 -- {
   {
   cart.length}}</view>

在这里插入图片描述
在这里插入图片描述
二 加入购物车
1 设置购物车添加方法

mutations: {
   
    
    addToCart(state , goods){
   
      const findResult = state.cart.find((x)=> x.goods_id === goods.goods_id)
      
      if(!findResult){
   
        state.cart.push(goods)
      }else{
   
        findResult.goods_count += 1
      }
    }
  },

2 在需要的页面 导入

import {
    mapMutations} from 'vuex'
methods: {
   
    ...mapMutations('m_cart',['addToCart']),    
}

3 加入购物车

	buttonClick(e){
   
        console.log(e)
        if (e.content.text === '加入购物车') {
   
            // 切换到购物车页面
            const goods = {
   
              goods_id : this.goods_info.goods_id, 
              goods_name : this.goods_info.goods_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值