# vue-ls 浏览器本地存储

# 1. 介绍

封装 localStorage、sessionStorage,提供统一的调用接口,可以设置过期时间。

在 vue2.x 中,作为插件使用,可以通过 Vue.lsthis.$ls 访问;

在 vue3.x 中,作为插件使用,只能通过 this.$ls 访问;

也可以单独使用,也就是说可以不在 vue 中使用。

# 2. 使用

# 2.1. 安装

npm i vue-ls

# "vue-ls": "^4.2.0"

# 2.2. API

# 2.2.1. Vue.ls.get(name, def)

Returns value under name in storage. Internally parses the value from JSON before returning it.

  • def: default null, returned if not set name.

# 2.2.2. Vue.ls.set(name, value, expire)

Persists value under name in storage. Internally converts the value to JSON.

  • expire: default null, life time in milliseconds name

# 2.2.3. Vue.ls.remove(name)

Removes name from storage. Returns true if the property was successfully deleted, and false otherwise.

# 2.2.4. Vue.ls.clear()

Clears storage.

# 2.2.5. Vue.ls.on(name, callback)

Listen for changes persisted against name on other tabs. Triggers callback when a change occurs, passing the following arguments.

  • newValue: the current value for name in storage, parsed from the persisted JSON
  • oldValue: the old value for name in storage, parsed from the persisted JSON
  • url: the url for the tab where the modification came from

# 2.2.6. Vue.ls.off(name, callback)

Removes a listener previously attached with Vue.ls.on(name, callback).

# 2.3. vue2.x

main.js:

import Vue from 'vue';
import VueLs from 'vue-ls';

import App from './App.vue'

Vue.config.productionTip = false

Vue.use(VueLs, {
  // 本地存储条目 key 的前缀
  namespace: 'vuejs__',

  // 暴露的名称: 通过 Vue.ls 及 this.$ls 访问
  name: 'ls',

  // 存储方式: session, local, memory
  storage: 'local',
});


new Vue({
  render: function (h) { return h(App) },
}).$mount('#app')

App.vue:

<template>
  <div id="app"></div>
</template>

<script>
import Vue from 'vue';

export default {
  mounted() {
    // -- set

    // vuejs__name: {"value":"zhangsan","expire":null}
    Vue.ls.set('name', 'zhangsan');

    // expiry 1 hour
    // vuejs__token: {"value":"123","expire":1707296103515}
    this.$ls.set('token', '123',60 * 60 * 1000); 

    // -- get

    console.log(`this.$ls.get('name')`, this.$ls.get('name'));

    // if not set age returned default 18
    console.log(`this.$ls.get('age', 18)`, this.$ls.get('age', 18));


    // -- on

    const callback = (val, oldVal, uri) => {
      console.log('localStorage change', val);
    } 
    
    Vue.ls.on('name', callback) // watch change foo key and triggered callback


    // -- off

    Vue.ls.off('name', callback) // unwatch
    

    // -- remove

    Vue.ls.remove('name');


    // -- clear
    Vue.ls.clear();
  },
}
</script>

# 2.4. vue3.x

main.js:

import { createApp } from 'vue'
import VueLs from 'vue-ls';
import App from './App.vue'

createApp(App)
  .use(VueLs, {
    // 本地存储条目 key 的前缀
    namespace: 'vue3js__',

    // 暴露的名称: 通过 Vue.ls 及 this.$ls 访问
    name: 'ls',

    // 存储方式: session, local, memory
    storage: 'local',
  })
  .mount('#app')

App.vue:

<template>
  <div></div>
</template>
<script>
export default {
  mounted() {
    this.$ls.set('isLogin', true , 60 * 60 * 1000); 

    console.log('isLogin', this.$ls.get('isLogin'));
  }
}
</script>

# 2.5. 单独使用

storage.js:

import VueLs from 'vue-ls';

const { ls } = VueLs.useStorage({
  // 本地存储条目 key 的前缀
  namespace: 'vue3js__',

  // 暴露的名称: 通过 Vue.ls 及 this.$ls 访问
  name: 'ls',

  // 存储方式: session, local, memory
  storage: 'local',
});

export default ls;

main.js:

import storage from './storage';

storage.set('isLogin', true , 60 * 60 * 1000); 

console.log('isLogin', storage.get('isLogin'));

# 3. 参考

本章目录