vuex过滤器getters

mac2025-03-23  11

业务需求:查询到所有的商品列表,根据商品的状态将其放入不同的表格

解决方案:

1、使用vue的过滤器

2、使用vuex的getters



目录结构:

App.vue文件

<template> <div id="app"> <!-- 显示所有的商品 --> <div class="listOne"> <p>所有商品</p> <ul v-for='item in products' :key='item.id'> <li>{{item.name}}</li> <li>{{item.status}}</li> </ul> </div> <!-- 显示已过期的商品 --> <div class="listTwo"> <p>过期商品</p> <!-- 将状态 已过期 作为参数传递给productFilter --> <ul v-for='item in productFilter("已过期")' :key='item.id'> <li>{{item.name}}</li> <li>{{item.status}}</li> </ul> </div> </div> </template> <script> import {mapState,mapGetters} from 'vuex' export default { data(){ return{ } }, created(){ }, computed:{ ...mapState(['products']), ...mapGetters(['productFilter']) }, methods:{ } } </script> <style scoped> #app div{ width: 200px; float: left; } </style>

store/index.js文件

import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { // 模拟数据,后期可替换为从后台获取的数据 products:[{ id:1, name:'牛奶', status:'已过期' },{ id:2, name:'咖啡', status:'未过期' },{ id:3, name:'雪碧', status:'已过期' },{ id:4, name:'奶茶', status:'未过期' }] }, getters:{ productFilter(state){ return (status)=>{ return state.products.filter(item => { // item为products中的每一个对象,将其status与vue页面传过来的参数进行比较,相等就返回 return item.status === status }) } } }, mutations: { }, actions: { }, })

页面效果

 

 

 

最新回复(0)