在vue中优雅的使用LocalStrong
h5的LocalStrong帮我们缓存一些数据到本地,最常用的使用场景,比如京东购物在未登陆的状态下,把商品加入购物车,收藏某个商品。当我们把url复制到另外一个浏览器,购物车就是空的。
以下是一个简单的商品收藏小demo,让我们在未登陆的状态下收藏某个商品。这个例子是学习vue时,看了仿饿了么教程,并把它提取出来,已做备用。
stroe.js:
// 此函数用来缓存数据 export function saveToLocal(id, key, value) { // 创建储存对象 let seller = window.localStorage.__seller__; if (!seller) { seller = {}; // 通过id向__seller__添加一个空缓存对象 seller[id] = {}; } else { // eg: JSON.parse('{"1":"123","2":"456"}') // result: {1:"123",2:"456"} seller = JSON.parse(seller); if (!seller[id]) { seller[id] = {}; } } seller[id][key] = value; // localStorage只能存储字符串 // eg: JSON.stringify({1:"123",2:"456"}) // result: "{"1":"123","2":"456"}" window.localStorage.__seller__ = JSON.stringify(seller); }; // 此函数返回一个布尔值 export function loadFromLocal(id, key, def) { let seller = window.localStorage.__seller__; // 默认值 if (!seller) { return def; } // 从id下获取缓存的对象 seller = JSON.parse(seller)[id]; if (!seller) { return def; } let ret = seller[key]; return ret || def; };
使用方法:
<tempalte> <div class="favorite" @click="toggleFavorite"> <span :class="{'active':favorite}">❤</span> </div> </tempalte> <script> import {saveToLocal, loadFromLocal} from 'store.js'; export default { // 父组件传过来一个id props: ['id'], data() { return { favorite: (() => { // 返回该id下 key为favorite的所对应的value,默认为false return loadFromLocal(this.id, 'favorite', false); })() } } methods: { toggleFavorite() { this.favorite = !this.favorite; // 把该id下 key为favorite的所对应的value 缓存起来 saveToLocal(this.id, 'favorite', this.favorite); } } } </script> <style> .active { color: red; } </style>
代码加了注释
胖胖熊笔记,笔记已迁移