首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >vuejs存储localStorage集对象

vuejs存储localStorage集对象
EN

Stack Overflow用户
提问于 2022-01-18 08:27:17
回答 1查看 181关注 0票数 1

我有一个主题配置存储,我在这个商店上设置了"localStorage“,我可以用同样的方式阅读它。但是我在一个接一个地记录,是否可以把它们全部作为对象发送,如果可能的话,请举一个例子。我如何设置它在商店,我是一个小新手在仓库,请相应地评论。

代码语言:javascript
复制
export const $themeConfig = {
    app: {
        appName: 'Name', 
        appLogoImage: '', 
    },
    layout: {
        skin: 'light', 
        type: 'vertical', 
        contentWidth: 'full', 
        menu: {
            hidden: false,
            isCollapsed: false,
        },
        navbar: {
            
            type: 'floating', 
            backgroundColor: 'dark',
        },
        footer: {
            type: 'static', 
        },
        customizer: true,
    },
}
代码语言:javascript
复制
import {$themeConfig} from '../../themeConfig'

export default {
    namespaced: true,
    state: {
        layout: {
            skin: localStorage.getItem('themeConfig-skin') || $themeConfig.layout.skin,
            type: localStorage.getItem('themeConfig-menuLayout') || $themeConfig.layout.type,
            contentWidth: localStorage.getItem('themeConfig-contentWidth') || $themeConfig.layout.contentWidth,
            menu: {
                hidden: localStorage.getItem('themeConfig-menuHidden') || $themeConfig.layout.menu.hidden,
            },
            navbar: {
                type: localStorage.getItem('themeConfig-navbarType') || $themeConfig.layout.navbar.type,
                backgroundColor: localStorage.getItem('themeConfig-navbarBG') || $themeConfig.layout.navbar.backgroundColor,
            },
            footer: {
                type: localStorage.getItem('themeConfig-footerType') || $themeConfig.layout.footer.type,
            },
        },
    },
    getters: {},
    mutations: {
        UPDATE_SKIN(state, skin) {
            state.layout.skin = skin

            localStorage.setItem('themeConfig-skin', skin)

            if (skin === 'dark') document.body.classList.add('dark-layout')
            else if (document.body.className.match('dark-layout')) document.body.classList.remove('dark-layout')
        },

        UPDATE_LAYOUT_TYPE(state, val) {
            localStorage.setItem('themeConfig-menuLayout', val)
            state.layout.type = val
        },
        UPDATE_CONTENT_WIDTH(state, val) {
            localStorage.setItem('themeConfig-contentWidth', val)
            state.layout.contentWidth = val
        },
        UPDATE_NAV_MENU_HIDDEN(state, val) {
            localStorage.setItem('themeConfig-menuHidden', val)
            state.layout.menu.hidden = val
        },
        UPDATE_NAVBAR_CONFIG(state, obj) {
            if (obj.backgroundColor)
                localStorage.setItem('themeConfig-navbarBG', obj.backgroundColor)
            else
                localStorage.setItem('themeConfig-navbarType', obj.type)
            Object.assign(state.layout.navbar, obj)
        },
        UPDATE_FOOTER_CONFIG(state, obj) {
            if (obj.type)
                localStorage.setItem('themeConfig-footerType', obj.type)
            else
                localStorage.setItem('themeConfig-footerType', obj.type)
                Object.assign(state.layout.footer, obj)
        },
    },
    actions: {},
}
EN

回答 1

Stack Overflow用户

发布于 2022-01-18 10:54:31

您可以创建助手函数,如:

代码语言:javascript
复制
function updateThemeConfig (key, data) {
  let state = localStorage.getItem('themeConfig');
  if(state){
    state = JSON.parse(state);
    state[key] = data;
  } else {
    state = {
      [key]: data;
    }
  }
  localStorage.setItem('themeConfig', JSON.stringify(state))
}

function getThemeConfig (key) {
  let state = localStorage.getItem('themeConfig');
  if(state) {
    state = JSON.parse(state);
    return state[key];
  }
  return;
}

然后像这样使用它:

代码语言:javascript
复制
footer: {
  type: getThemeConfig('footerType') || $themeConfig.layout.footer.type,
},
...
UPDATE_LAYOUT_TYPE(state, val) {
  updateThemeConfig('menuLayout', val); 
  state.layout.type = val
},
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70752393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档