vuex过滤器getters

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

解决方案:

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: {

  },
 
})

页面效果

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章