Vuex可以支持插件形式,来处理指定业务,比如:持久化存储的插件(当每次刷新浏览器的时候store里面的参数都会被清除,因为它是存在内存中的,而不是存在本地的,有时候我们希望将一些东西存在本地)

插件其实是一个函数,它只有一个参数就是store,这个函数实在store初始化的时候(实例初始化的时候)调用,刷新浏览器后第一次做的操作可以定义在该函数里,该操作由store的subscribe方法来完成,该方法是当每次提交mutation的时候,它都会执行subscribe里面的回调函数,该回调函数有两个参数:mutation(本次提交的muation的一些信息)、state(当前模块的state).

使用插件:在创建实例的地方:index.js加载插件:

import saveInLocal from './plugin/saveInLocal'

plugins: [saveInLocal]

插件使用思路:每次提交的时候,我们希望将提交的数据存放在本地,那么就需要把提交的内容存放在localStorage的state里,因为函数中state参数是一个对象,因此要转化成JSON字符串来存储,然后每次刷新后我们需要将localStorage里的state里的内容读出来重新存放在store实例里?

首先要做一个判断:如果当前实例中的localStorage.state已经存储了有了值,那么我们就需要通过store.repalceState(JSON.parse(localStorage.state))方法,将字符串转成对象,然后替换到当前实例里

export default store => {
console.log('store初始化了')
if (localStorage.state) store.replaceState(JSON.parse(localStorage.state)) // 如果当前实例中的localStorage.state已经存储了有了值
store.subscribe((mutation, state) => {
console.log('提交mutation')
localStorage.state = JSON.stringify(state) // 把提交的内容存放在localStorage的state里,因为函数中state参数是一个对象,因此要转化成JSON字符串来存储
})
}

Vue-admin工作整理(十二):Vuex-插件(持久化存储)的更多相关文章

  1. Vue-admin工作整理(二):项目结构个人配置

    通过上一篇文章(Vue-admin工作整理(一):项目搭建)操作完毕后,基础项目已经搭建,下面就要对项目本身进行一下项目结构调整来符合自己的项目要求 1.首先要对package.json文件进行调整, ...

  2. How Javascript works (Javascript工作原理) (十二) 网络层探秘及如何提高其性能和安全性

    个人总结:阅读完这篇文章需要20分钟,这篇文章主要讲解了现代浏览器在网络层传输所用到的一些技术, 应当对 window.performance.timing 这个API所有了解. 这是 JavaScr ...

  3. vuex数据持久化存储

    想想好还是说下vuex数据的持久化存储吧.依稀还记得在做第一个vue项目时,由于刚刚使用vue,对vue的一些基本概念只是有一个简单的了解.当涉及到非父子组件之间通信时,选择了vuex.只是后来竟然发 ...

  4. Kubernetes 学习(十)Kubernetes 容器持久化存储

    0. 前言 最近在学习张磊老师的 深入剖析Kubernetes 系列课程,最近学到了 Kubernetes 容器持久化存储部分 现对这一部分的相关学习和体会做一下整理,内容参考 深入剖析Kuberne ...

  5. [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制

    一.前言 前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的.那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由 ...

  6. Dynamic CRM 2013学习笔记(二十二)插件里调用WCF服务

      1. 添加service:     2.调用WCF BasicHttpBinding myBinding = new BasicHttpBinding(); myBinding.Name = &q ...

  7. Session 知识点再整理(二) 自定义 Session 存储机制

    对于访问量大的网站,用默认的 Session 存储方式(以文件存储)不适合,因为文件的 I/O 开销会非常大,另外 Session 机制本身使 Session 不能跨机访问,在 Web 集群中无法达到 ...

  8. 【Beta阶段】第十二周Scrum会议

    [Beta阶段]第十二周Scrum会议 本次会议为第十二周第一次Scrum Meeting,会议对Beta阶段工作进行了总结,针对Beta阶段还未完成的问题进行了讨论. 会议时间为2019.12.3. ...

  9. 计算机网络(十二),Socket简介

    目录 1.Socket简介 2.Socket工作原理 十二.Socket简介 1.Socket简介 2.Socket工作原理

随机推荐

  1. 5.6版本GTID复制异常处理一例(转)

    http://imysql.com/2014/07/31/mysql-faq-exception-replication-with-gtid.shtml 昨天处理了一个MySQL 5.6版本下开启GT ...

  2. Java面试题和解答(一)

    1.说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? JVM原理 :http://www.cnblogs.com/jiayi/archive/2010/06/08/1753863.html 内存 ...

  3. IDEA使用技巧

    1,导入原Eclipse Web项目 由于使用 PowerDesign连接MySql时只能用32位 Jdk,原Eclipse项目依赖于64位Jdk,导致在eclipse打不开工程,把工程导入IDEA后 ...

  4. Azure基础(二)- 核心云服务 - Azure简介

    Azure fundamentals - Core Cloud Services - Introduction to Azure Learn what Microsoft Azure is and h ...

  5. Oracle SQL Loader

    C:/Documents and Settings/WWJD>sqlldr SQL :: Copyright (c) , , Oracle. All rights reserved. 用法: S ...

  6. MySQL建表 TIMESTAMP 类型字段问题

    Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT ...

  7. 21.命名空间别名限定符::和global全局名称空间限定符

    命名空间别名限定符(::)用于查找标识符,它在指定的别名的命名空间中查找运算符,如下代码是在全局名称空间中查找System.Console.WriteLine("Hello World&qu ...

  8. EF中,保存实体报错:Validation failed for one or more entities. 如何知道具体错误在哪?

    异常提示:Validation failed for one or more entities. See 'EntityValidationErrors' property for more deta ...

  9. python打包

    打包生成一个可执行文件(非窗口程序的) pyinstall -F  example.py  

  10. Python练习:小程序,列车出票程序

    # 需求:列车某结车厢座位有15行,5列,初始状态均为'有票',当乘客选了座次,下单后,变更为'已售' # 下单时,要显示所有座位的状态(有票or已售) # 下单完毕后,显示下单后的座位状态. lin ...