1 获取数据
在 vuex 中存储了商品数据,mapGetters 辅助函数映射到 computed 中,就可以直接使用 getters 中的属性。
1 | // 从 vuex 中导入 |
2 导航栏
复用 NavBar 组件
商品的数量 :reduce方法适用于数组的加和计算。
1 | cartLength(state) { |
3 商品信息展示
封装 CartList 和 CartListItem 组件。CartListItem 展示商品信息,内部封装 checkButton(选中和不选中按钮)
1) 把 isChecked 属性添加到 product 商品模型中
1 | // 默认是 true 已经被选中 |
2)CartListItem 动态监听按钮的点击事件,每次点击将 isChecked 值取反。
1 | <check-button @click.native="checkClick" :isChecked="proudcts.isChecked" /> |
3)点击商品列表,进入商品的详情页。
1 | productClick() { |
4)监听 checkButton 点击事件发生冒泡,stop修饰符
4 底部结算按钮
封装 CartBottomBar 组件
1) 全选按钮 ,复用 checkButton
2)总价钱,利用 fliter 和 reduce 方法
3)总数量,利用 fliter 方法
1 | totalPrice() { |
4.1 全选按钮
显示状态:判断有一个不选,就不选中,否则选中
1 | isSelectAll() { |
点击全选按钮
1 | checkClick() { |
5 购物车功能完善
5.1 vuex 传递信息
添加购物车属于异步操作。
vuex 做了某些操作,想让外面知道,通过 promise 传递。
比如添加购物车,将商品信息存储在 vuex,如果添加成功,需要弹出弹框提示用户。
1 | // actions 方法 |
5.2 mapActions 辅助函数
mapActions 的映射关系,先组件中导入 mapActions,然后在 methods 映射,actions中的方法就相当于 methods 中方法。
1 | methods: { |
6 Toast 封装 — 插件方式的封装
1)封装 Toast 组件,其他对象可以调用 show 方法显示,或者隐藏 toast
1 | data() { |
2)在 main.js 中安装 toast 插件
1 | import toast from './components/common/toast'; |
3)实现 toast 对象的 install方法,需要创建组件构造器
1 | import Toast from './Toast';// Toast组件对象 |
5)使用 toast 对象中的方法
1 | this.addCart(product).then((res) => { |