Vue 关于Store的用法

Store就是全局变量都是可以双向绑定的,以下是模块的用法:

state定义的是变量名称,mutations里面是给变量赋值的方法

export default {
    namespaced: true,
    state: {
        //打开的Tabs
        tabs: null,
        //当前显示的key
        selectTabKey: null
    },
    mutations: {
        setSelectTabKey(state, key) {
            state.selectTabKey = key;
            localStorage.setItem(process.env.ADMIN_TABS_SELECT_KEY, JSON.stringify(key));
        },
        setTabs(state, tabs) {
            state.tabs = tabs;
            localStorage.setItem(process.env.ADMIN_TABS_KEY, JSON.stringify(tabs));
        },
        initTabs(state, tab) {
            var localTabs = localStorage.getItem(process.env.ADMIN_TABS_KEY)
            if (localTabs != null) {
                state.tabs = JSON.parse(localTabs);
                state.selectTabKey = JSON.parse(localStorage.getItem(process.env.ADMIN_TABS_SELECT_KEY));
            } else {
                state.selectTabKey = tab.key;
                localStorage.setItem(process.env.ADMIN_TABS_SELECT_KEY, JSON.stringify(state.selectTabKey));

                state.tabs = [];
                state.tabs.push({
                    title: tab.title,
                    icon: tab.icon,
                    content: "",
                    key: tab.key,
                    closable: false,
                    icon_bk: "",
                    url: tab.url,
                });
                localStorage.setItem(process.env.ADMIN_TABS_KEY, JSON.stringify(state.tabs));
            }
        },
        addTabs(state, tab) {
            state.selectTabKey = tab.key;
            localStorage.setItem(process.env.ADMIN_TABS_SELECT_KEY, JSON.stringify(state.selectTabKey));

            var localTabs = localStorage.getItem(process.env.ADMIN_TABS_KEY)
            if (localTabs != null) {
                state.tabs = JSON.parse(localTabs);
            }
            if (state.tabs == null) {
                state.tabs = [];
            }
            //判断有没有在tabs里面
            var isAdd = false;
            for (var pn of state.tabs) {
                if (pn.key == tab.key) {
                    isAdd = true;
                    break;
                }
            }
            if (isAdd == false) {
                state.tabs.push({
                    title: tab.title,
                    icon: tab.icon,
                    content: "",
                    key: tab.key,
                    closable: true,
                    icon_bk: "",
                    url: tab.url,
                });
            }
            localStorage.setItem(process.env.ADMIN_TABS_KEY, JSON.stringify(state.tabs));
        },
    }
}

然后整合模块

import menu from './menu'
import tab from './tab'
import setting from './setting'

export default {menu, tab,setting}

 对外输出

import Vue from 'vue'
import 'es6-promise/auto'
import Vuex from 'vuex'
import modules from './modules'

Vue.use(Vuex)
const store = new Vuex.Store({modules})

export default store

 Main方法注册

 获取

this.$store.state.tab.selectTabKey

赋值

this.$store.commit("tab/setSelectTabKey", targetKey);

 监控值改变

watch: {
    "$store.state.tab.selectTabKey": {
      handler: function (newVal, oldVal) {
        if (this.currTarger != newVal) {
          this.onTabChange(newVal);
        }
      },
    },
  },

可以直接绑定

注意点,全局变量存localstore的时候必须转JSONString,取的时候也得转,否则 绑定到控件上会失效

localStorage.setItem(process.env.ADMIN_TABS_SELECT_KEY, JSON.stringify(key));

 取

state.selectTabKey = JSON.parse(localStorage.getItem(process.env.ADMIN_TABS_SELECT_KEY));

之前直接这样写会导致无法绑定到控件

localStorage.setItem(process.env.ADMIN_TABS_SELECT_KEY, key);

state.selectTabKey = localStorage.getItem(process.env.ADMIN_TABS_SELECT_KEY);

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vuestore是用来管理状态的,它是通过Vuex插件来实现的。在使用store之前,需要先引入VueVuex,并使用Vue.use(Vuex)来注册插件。然后使用new Vuex.Store来创建一个全局的store对象。 store对象有几个重要的属性和方法,包括state、mutations、getters、actions和modules。 - state:用来存储状态,也就是变量。可以在state中定义全局参数。 - mutations:用来提交状态修改,也就是set方法。mutations是vuex中唯一修改state的方式,它是同步的,不支持异步操作。可以通过store.commit来调用mutations中的方法。 - getters:用来获取派生状态,也就是get方法。getters有两个可选参数:state和getters,分别可以获取state中的变量和其他的getters。可以通过store.getters来调用getters中的方法,类似于vue中的computed属性。 - actions:用来处理state的方法体。actions和mutations类似,但是actions支持异步操作。第一个参数默认是和store具有相同参数属性的对象。可以通过store.dispatch来调用actions中的方法。 - modules:用来划分store的子模块,可以将全局变量按照模块进行分组管理。每个模块都有自己的state、mutations、getters和actions。可以通过store.moduleName来调用对应模块的方法。 总结来说,通过使用Vuex的store,可以方便地管理和共享Vue应用的状态。你可以在state中定义全局参数,在mutations中提交状态修改,在getters中获取派生状态,在actions中处理异步操作,在modules中划分子模块进行管理。这样可以使得代码更加结构化和可维护。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vuestore 基本用法](https://blog.csdn.net/qq_41520636/article/details/121882632)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Vuestore 使用方法讲解](https://blog.csdn.net/jump_22/article/details/116134458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值