export default new Vuex.Store({//实例化vuex配置对象 并导出 state: { username: '', flowerList: flowerList, categoryList: categoryList, flower: {}, cart: [] }, mutations: { LOGIN(state, { username }) { state.username = username; }, DETAIL(state, flower) { state.flower = flower; }, ADDCART(state, flower) { if (state.cart.length == 0) { Vue.set(flower, 'number', 1) state.cart.push(flower) return; } for (let index = 0; index < state.cart.length; index++) { if (state.cart[index].flowerName == flower.flowerName) { state.cart[index].number++; return; } } Vue.set(flower, 'number', 1) state.cart.push(flower) }, ADD(state, flower) { state.cart.forEach((item) => { if (item.flowerName == flower.flowerName) item.number++; }) }, SUB(state, flower) { state.cart.forEach((item) => { if (item.flowerName == flower.flowerName) item.number--; }) }, DELETE(state, flower) { state.cart = state.cart.filter((item) => { if (item.flowerName != flower.flowerName) return true; }) }, PAY(state, selectflower) { state.cart = state.cart.filter((item) => { let flag = false; for (let index = 0; index < selectflower.length; index++) { if (item.flowerName == selectflower[index].flowerName) { flag = true; break; } } if (flag) return false; else return true; }) }, CLEAR(state) { state.cart = []; } }, plugins: [ new VuexPersist({ storage: window.localStorage, }).plugin, ] })
时间: 2024-02-29 21:56:52 浏览: 194
这是一个使用 Vuex 状态管理的配置对象,其中包含了状态 state、变更操作 mutations 和插件 plugins。
state 包含了应用的一些数据,比如用户名、花卉列表、分类列表、当前选择的花卉、购物车等。
mutations 是用来修改 state 的方法,包括登录、查看商品详情、添加商品到购物车、增加商品数量、减少商品数量、删除商品、结算购物车、清空购物车等操作。
plugins 是 Vuex 的插件系统,用于扩展 Vuex 功能。在这个配置对象中,使用了 VuexPersist 插件,该插件可以将 Vuex 状态持久化到本地存储中,防止刷新页面时状态被重置。
相关问题
解释代码:<script> import navBar from '@/components/NavBar' import swiper from '@/components/Swiper' import { getHome } from '../service/home' import { getUserInfo } from '../service/user' import { getLocal } from '@/common/js/utils' import { Toast } from 'vant' import axios from '../utils/axios' export default { name: 'home', data() { return { swiperList: [], isLogin: false, headerScroll: false, hots: [], newGoodses: [], recommends: [], categoryList: [ { name: '楼楼交友', imgUrl: '//s.yezgea02.com/1598679532890/jiaoyou.png', categoryId: 100001 }, { name: '楼楼家政', imgUrl: '//s.yezgea02.com/1598679532890/jiazheng.png', categoryId: 100003 }, { name: '楼楼水产', imgUrl: '//s.yezgea02.com/1598679734813/shuichan1.png', categoryId: 100002 }, { name: '楼楼租车', imgUrl: '//s.yezgea02.com/1598679532890/zuche.png', categoryId: 100004 }, { name: '楼楼招聘', imgUrl: '//s.yezgea02.com/1598679792590/pin.png', categoryId: 100005 }, { name: '楼楼二手', imgUrl: '//s.yezgea02.com/1598679853415/ershou.png', categoryId: 100006 }, { name: '楼楼宠物', imgUrl: '//s.yezgea02.com/1598679532890/chongwu.png', categoryId: 100007 }, { name: '楼楼外卖', imgUrl: '//s.yezgea02.com/1598679905787/wm.png', categoryId: 100008 }, { name: '楼楼电器', imgUrl: '//s.yezgea02.com/1598680199443/dianqi.png', categoryId: 100009 }, { name: '楼楼充值', imgUrl: '//s.yezgea02.com/1598680264015/czcz.png', categoryId: 1000010 } ], } }, components: { navBar, swiper }, async mounted() { const token = getLocal('token') if (token) { this.isLogin = true } window.addEventListener('scroll', this.pageScroll) Toast.loading({ message: '加载中...', forbidClick: true }); const { data } = await getHome() this.swiperList = data.carousels this.newGoodses = data.newGoodses this.hots = data.hotGoodses this.recommends = data.recommendGoodses Toast.clear() }, methods: { pageScroll() { let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop scrollTop > 100 ? this.headerScroll = true : this.headerScroll = false }, goToDetail(item) { this.$router.push({ path: `product/${item.goodsId}` }) } } } </script>
这是一个 Vue.js 组件的代码,其中包含了导入组件、导入服务、导入工具函数、导入第三方库等等。组件的名称是 home,其中包含了一些数据和方法,如轮播图列表、是否登录、是否滚动等等。在 mounted 生命周期中,会调用 getHome() 函数获取首页数据,并将获取到的数据赋值给组件的数据。在 methods 中,还包含了一个 goToDetail() 方法,用于跳转到商品详情页。
computed: { ...mapState({ flowerList: (state) => state.flowerList, categoryList: (state) => state.categoryList, }), }, } <el-pagination class="pagination" :current-page="page.currentPage" :page-sizes="[8, 16, 24]" :page-size="page.pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" layout="prev, pager, next, jumper, ->, sizes, total" :total="page.total"> </el-pagination>
这段代码是一个Vue组件中的computed计算属性和一个Element UI的分页器组件(el-pagination)。
在computed属性中,使用了Vuex的mapState辅助函数来将store中的state中的flowerList和categoryList映射到组件中的计算属性中。这样,我们就可以在组件中访问这两个状态,从而实现对商品列表和分类列表的展示。
在el-pagination组件中,使用了绑定属性的方式将当前页码(currentPage)、每页显示的条数(pageSize)和总条数(total)等信息绑定到组件上,以便分页器能够根据这些信息进行渲染。同时,使用了layout属性来指定分页器的布局,包括上一页、下一页、跳转输入框、每页显示条数等内容。通过监听size-change和current-change事件,分页器能够在用户修改每页显示条数和切换页面时触发相应的回调函数进行处理,实现了分页器的可定制性和交互性。
阅读全文