美文网首页
vue全局枚举值缓存

vue全局枚举值缓存

作者: 陈大事_code | 来源:发表于2020-09-29 09:23 被阅读0次

场景:项目中的枚举值,通常来说是不会变,那么每次请求接口获取枚举值就有点浪费时间了。

措施:全局请求一次,将所有的枚举值放入缓存。

技术栈:localStorage + vuex + vueRouter

大致实现说明:

  1. vuex中的action中先判断缓存中是否存在枚举值。
  2. 若不存在,异步获取所有枚举值接口,并放入缓存,设置vuex中state的枚举值。
  3. 若存在,从缓存中获取枚举值,并设置vuex中state的枚举值。
  4. 在getters中写全局获取具体某个code的枚举值。
  5. 在vueRouter中的beforeEach中调用。

步骤一:vuex modules的enum.js中

import { getDicts } from '@/api/system/dict'

export default {
  namespaced: true,
  state: {
    enumAll: {}
  },
  mutations: {
    // 设置所有枚举值
    setEnumAll(state, value) {
      state.enumAll = value
    }
  },
  actions: {
    // 异步获取所有枚举值
    asyncGetEnumAll({ commit }) {
      const enumObj = ls.get('enumAll') || {}
      if (Object.keys(enumObj).length) {
        // 缓存有值,则从缓存取,并设置state
        commit('setEnumAll', enumObj)
      } else {
        // 否则,从接口获取
        getDicts().then(res => {
          let obj = {}

          res.forEach(item => {
            let objValue = item.map(({ value, label }) => ({
              value,
              label
            }))
            
            // 以对象的形式存储(code为key, 枚举值为value)
            obj[item.name] = objValue
          })

          // 放入缓存
          ls.set('enumAll', obj)
          // 设置state
          commit('setEnumAll', obj)
        })
      }
    }
  }
}

步骤二:vuex中的getters方法

const getters = {
  getEnum: state => code => state.enum.enumAll[code] || []
}
export default getters;

说明:getters方法传参,传入枚举值code码,返回响应的枚举值。

注意:注意下getters接受参数的方式,返回的是一个方法,该方法参数即为getters的接受参数。

步骤三:在vue-Router中的beforeEach中调用

import router from './routers'
import store from '@/store'

router.beforeEach((to, from, next) => {
  if (getToken()) { 
    // 存在token
    // 已登录且要跳转的页面是登录页
    if (to.path === '/login') {
      next({ path: '/' })
    } else {
      // 跳转非登录页
      // 缓存数据
      store.dispatch('enum/asyncGetEnumAll')
  } else {
     ...没token处理
  }
})

相关文章

  • vue全局枚举值缓存

    场景:项目中的枚举值,通常来说是不会变,那么每次请求接口获取枚举值就有点浪费时间了。 措施:全局请求一次,将所有的...

  • ts-Basic Types

    boolean, number, string, array 枚举 枚举值默认从0开始,也可以自己指定。定义全局的...

  • Swift与OC的语法简单对比(常用语法二)

    20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...

  • 枚举类

    1.枚举类型的定义: 枚举类型定义的一般形式为 enum 枚举名{//枚举值表枚举值1;枚举值2;...} 在枚举...

  • vuex

    VUEX的使用 vuex的作用: 常用来作为全局状态管理器, 定义一个状态全局可用,部分功能与缓存类似,但是vue...

  • vue-resource 配置

    使用全局配置设置默认值。 在 Vue 组件选项中设置默认值。 Webpack/Browserify 在 packa...

  • node-Vue 环境搭建

    node-Vue 环境搭建 一、下载node,安装node 1、下载地址 2、设定node全局目录和缓存目录。配置...

  • Swift-枚举名、枚举值的相互转化

    通过枚举名获取到枚举值 或者 通过枚举值获取到枚举名称 .End

  • Swift 2 学习笔记 10.枚举

    课程来自慕课网liuyubobobo老师 枚举 枚举基础 枚举之原始值 枚举之关联值 枚举递归

  • Swift 5 枚举

    枚举 关联值: 枚举的成员值和其他类型的值关联储存,存储在枚举变量中 原始值: 枚举成员使用相同的默认值预先对应,...

网友评论

      本文标题:vue全局枚举值缓存

      本文链接:https://www.haomeiwen.com/subject/hiisuktx.html