在介绍state中咱们了解到,在Store仓库里,state就是用来存放数据,如果对数据进行处理输出,好比数据要过滤,通常咱们能够写到computed中。可是若是不少组件都使用这个过滤后的数据,好比饼状图组件和曲线图组件,咱们是否能够把这个数据抽提出来共享?这就是getters存在的意义。咱们能够认为,【getters】是store的计算属性。html
经过属性访问,经过方法访问:vue
在storestore.jsvuex
[html] view plain copy import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ //建立一个对象来保存应用启动时的初始状态 state:{ // 应用启动时, count置为0 count:0, todos: [ { id: 1, text: '水果类', done: true }, { id: 2, text: '苹果', done: true }, { id: 3, text: '苹果', done: false} ] }, getters: { doneTodos: state => {//经过方法访问 return state.todos.filter(todo => todo.done) }, doneTodosCount: (state, getters) => {//经过属性访问 return getters.doneTodos.length } } })
vueDome.vue数组
<template> <div> <P>经过属性访问:{{doneTodosCount}}</p> <P>经过方法访问:{{todos}}</p> </div> </template> /* ### mapState 辅助函数 当映射的计算属性的名称与 state 的子节点名称相同时, 咱们也能够给 mapState 传一个字符串数组 */ import { mapState } from 'vuex' export default { computed:{ todos:function() { //经过方法访问 return this.$store.getters.doneTodos; }, doneTodosCount () { return this.$store.getters.doneTodosCount } } } </script>
mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性:函数
<template> <div> <h4>测试1:Count is {{count}}</h4> <P>经过属性访问:{{doneTodosCount}}</p> <P>经过方法访问:{{doneTodos}}</p> </div> </template> <script> import {mapGetters} from 'vuex' export default { computed:{ count(){ return this.$store.state.count }, ...mapGetters([ 'doneTodos', 'doneTodosCount' ]) } } </script>
效果同上。分析:
1...mapGetters表示// 使用对象展开运算符将 getters 混入 computed 对象中测试
2.mapGetters里面的都是store.js里面的getters的方法名this