1. 定义:
getters是属于vuex中的一部分,是state的计算属性在这里我们在vuex中定义getters来优化是否登录这个功能:
import Vue from 'vue'import Vuex from 'vuex'import { setItem, getItem } from '@/utils/storage.js'Vue.use(Vuex)export default new Vuex.Store({ // 保存公共数据 state: { tokenInfo: { token: initTokenObj.token || '', refresh_token: initTokenObj.refresh_token || '' } }, // 相当于组件中的computed getters: { isLogin (state) { // !!XXXX == 把XXXX转成bool值 return !!state.tokenInfo.token // if (state.tokenInfo.token) { // return true // } else { // return false // } } },})
这里有一个帅气的代码:
!!xxx == 把xxx 转成布尔值
在这里 一个感叹号是fasle,两个感叹号就是true 所以就是有token的意思<br /> 
2.使用
在组件中的使用方法有两种:
方法1:
this.$store.getters.xxx
代码演示:
<!-- 频道列表 开关 通过定位 --> <div v-if="$store.getters.isLogin" class="bar-btn" @click="showChannelEdit=true"> <van-icon name="wap-nav"/> </div>
方法2:
mapGetters
代码演示:
import { mapGetters } from 'vuex'computed: { ...mapGetters(['isLogin']) },
在视图中:
<!-- 如果是登陆用户(有没有token),则显示x按钮 --> 本来是这样写的: $store.state.tokenInfo.token<!-- <span class="close" @click="hClose(item)" v-if="$store.state.tokenInfo.token"> --> 现在是这样写的 isLogin <span class="close" @click="hClose(item)" v-if="isLogin"> <van-icon name="cross"></van-icon></span>