VUE浏览器储存封装
import {isFunction, extend} from 'lodash'
const _originStorage = function () {
var pluses = /\+/g
function encode (s) {
return _cookie.raw ? s : encodeURIComponent(s)
}
function decode (s) {
return _cookie.raw ? s : decodeURIComponent(s)
}
function stringifyCookieValue (value) {
return encode(_cookie.json ? JSON.stringify(value) : String(value))
}
function parseCookieValue (s) {
if (s.indexOf('"') === 0) {
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\')
}
try {
s = decodeURIComponent(s.replace(pluses, ' '))
return _cookie.json ? JSON.parse(s) : s
} catch (e) {}
}
function read (s, converter) {
var value = _cookie.raw ? s : parseCookieValue(s)
return isFunction(converter) ? converter(value) : value
}
var _cookie = function (key, value, options) {
// Write
if (arguments.length > 1 && !isFunction(value)) {
options = extend({}, _cookie.defaults, options)
if (typeof options.expires === 'number') {
var days = options.expires
var t = options.expires = new Date()
t.setMilliseconds(t.getMilliseconds() + days * 864e+5)
}
return (document.cookie = [
encode(key), '=', stringifyCookieValue(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''))
}
var result = key ? undefined : {}
var cookies = document.cookie ? document.cookie.split('; ') : []
var i = 0
var l = cookies.length
for (; i < l; i++) {
let parts = cookies[i].split('=')
let name = decode(parts.shift())
let cookie = parts.join('=')
if (key === name) {
result = read(cookie, value)
break
}
if (!key && (cookie = read(cookie)) !== undefined) {
result[name] = cookie
}
}
return result
}
// originStorage
return (function () {
var cookieKeyPrefix = '__localStorage__'
var supportLocalStorage = true
try {
window.localStorage.setItem('__test__', 1)
window.localStorage.getItem('__test__')
window.localStorage.removeItem('__test__')
} catch (e) {
supportLocalStorage = false
}
if (supportLocalStorage) {
return {
get: function (key) {
return window.localStorage.getItem(key)
},
set: function (key, value) {
return window.localStorage.setItem(key, value)
},
clear: function () {
return window.localStorage.clear()
},
remove: function (key) {
return window.localStorage.removeItem(key)
}
}
} else {
return {
get: function (key) {
return _cookie(cookieKeyPrefix + key)
},
set: function (key, value) {
return _cookie(cookieKeyPrefix + key, value, {
expires: 365
})
},
clear: function () {
var cookies = document.cookie.split(';')
for (var i = 0; i < cookies.length; i++) {
var key = cookies[i].split('=')[0]
if (key.indexOf(cookieKeyPrefix) === 0) {
_cookie(key, '', {
expires: -1
})
}
}
},
remove: function (key) {
return _cookie(cookieKeyPrefix + key, '', {
expires: -1
})
}
}
}
})()
}
// export default () => {
const _localStorage = function () {
const originStorage = _originStorage()
this.defaultOption = {
maxAge: 0 // ms
}
this.get = function (k) {
var self = this
var a = originStorage.get(k)
var _return
try {
var json = JSON.parse(a)
var expiresTimestamp = json.e
if (expiresTimestamp && Date.now() > expiresTimestamp) {
_return = undefined
self.remove(k)
} else {
_return = json.a
}
} catch (e) {
_return = undefined
}
return _return
}
this.set = function (k, v, option) {
option = extend(true, extend({}, this.defaultOption), option)
var o = {
a: v,
e: option.maxAge > 0 ? (Date.now() + option.maxAge) : 0
}
originStorage.set(k, typeof o === 'string' ? o : JSON.stringify(o))
}
this.clear = function () {
return originStorage.clear()
}
this.remove = function (k) {
return originStorage.remove(k)
}
}
export default new _localStorage()
挂载
// localStorage plugin
import localStorage from '@/common/localstorage'
function plugin (Vue) {
if (plugin.installed) {
return
}
Vue.localStorage = localStorage
Object.defineProperties(Vue.prototype, {
$localStorage: {
get () {
return localStorage
}
}
})
}
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(plugin)
}
export default plugin
引入import LocalStorage from '@/plugin/localStorage';
Vue.use(LocalStorage);
VUE浏览器储存封装的更多相关文章
- vue2.0 如何自定义组件(vue组件的封装)
一.前言 之前的博客聊过 vue2.0和react的技术选型:聊过vue的axios封装和vuex使用.今天简单聊聊 vue 组件的封装. vue 的ui框架现在是很多的,但是鉴于移动设备的复杂性,兼 ...
- Vue之优化封装请求方法
Vue之优化封装请求方法 对于代码中的请求操作 1.接口请求可能需要重用 2.实际工作中,接口非常容易变动, 改起来很麻烦! 我们建议的做法是把所有的请求都封装成函数然后统一的>###组织到模块 ...
- vue自定义插件封装,实现简易的elementUi的Message和MessageBox
vue自定义插件封装示例 1.实现message插件封装(类似简易版的elementUi的message) message组件 <template> <transition ...
- 实例PK(Vue服务端渲染 VS Vue浏览器端渲染)
Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...
- Vue服务端渲染和Vue浏览器端渲染的性能对比
Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...
- Vue服务端渲染 VS Vue浏览器端渲染)
Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...
- vue项目-axios封装、easy-mock使用
vue全家桶概括下来就是 项目构建工具(vue-cli) 路由(vue-router) 状态管理(vuex) http请求工具 vue有自己的http请求工具插件vue-resource,但是vue2 ...
- android利用WebView实现浏览器的封装
android提供了封装浏览器的接口,可以让开发者利用自己的view显示网页内容.今天又实现研究了一下,利用WebView显示浏览器内容,还可以利用 WebViewClient显示自己需要的内容. 参 ...
- 原生JS跨浏览器事件封装处理
引子:用javascript给元素绑定事件,我们可以用addEventListener这个方法,然而这个方法有兼容问题,比如在IE浏览器上面就无效,在IE上面要用attachEvent这个方法 一.a ...
随机推荐
- TF.VARIABLE、TF.GET_VARIABLE、TF.VARIABLE_SCOPE以及TF.NAME_SCOPE关系
1. tf.Variable与tf.get_variable tensorflow提供了通过变量名称来创建或者获取一个变量的机制.通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要 ...
- Android为TV端助力linux命令
从命令行push到系统目录,用户组是root,而代码里面的是个人用户组,所以要把你push进去的东西改成跟你APK一样的用户组,并且chmod -R 777 文件名修改文件的权限 修改用户组chown ...
- C++析构函数可虚性探究
C++虚析构函数 析构函数是用来释放对象所申请的资源的函数. 当类内没有自定义的析构函数时,系统会自动调用默认的析构函数. 那么析构函数能否为虚函数呢? 虚函数的意义在于实现“多态性”.即:不同的个体 ...
- [aspnetcore.apidoc]一款很不错的api文档生成工具
AspNetCore.ApiDoc 简单徐速一下为什么选用了aspnetcore.apidoc 而没有选用swagger 最初我们也有在试用swagger,但总是有些感觉,感觉有点不满意,就但从api ...
- Vue2.5笔记:Vue的实例与生命周期
理解与认识 Vue 的实例是我们学习 Vue 非常重要的一步,也是非常必须的,因为实例是它的一个起点,也是它的一个入口,只有我们创建一个 Vue 实例之后,我们才行利用它进行一些列的操作. 首先 Vu ...
- Kafka相关内容总结(存储和性能)
Kafka消息的存储 Kafka的设计基于一种非常简单的指导思想:不是要在内存中保存尽可能多的数据,在需要时将这些数据刷新(flush)到文件系统,而是要做完全相反的事情.所有数据都要立即写入文件系统 ...
- 关于.net中的DataSet和DataTable
DataSet ds = new DataSet(); ds.Tables.Add(); ds.Tables[].Columns.Add("name"); ds.Tables[]. ...
- c/c++ 多线程 层级锁
多线程 层级锁 当要同时操作2个对象时,就需要同时锁定这2个对象,而不是先锁定一个,然后再锁定另一个.同时锁定多个对象的方法:std::lock(对象1.锁,对象2.锁...) 但是,有的时候,并不能 ...
- sqlserver数据库导出表结构和表数据生成创建表和insert语句
问题描述: 有时候我们只需要导出一张表和表数据到另外一个数据库,如果是备份整个库的话,就会很麻烦那样,没法满足需求. 解决方法: 以sqlserver2014为例:把MGActivity数据库的bat ...
- IIS 反向代理到 Apache、Tomcat
将请求的网址重写重定向到其它网址.当80端口被占用无法同时使用两个Web服务的解决方案,使得IIS和Apache Tomcat 共存 环境 WindowServer 2008 IIS7 Apache ...