1、utils/utils.js
const namespace = 'mall' export function setItem(key, value) { let storage = window.localStorage.getItem(namespace) storage = storage ? JSON.parse(storage) : {} storage[key] = value window.localStorage.setItem(namespace, JSON.stringify(storage)) } export function getItem(key) { let storage = window.localStorage.getItem(namespace) if (!storage) return false storage = JSON.parse(storage) const flag = storage[key] return flag || false }
2、使用
<span class="iconfont icon-like" :class="{'active': like}" @click="handleToggle">span>
import { setItem, getItem } from '@/utils/utils'
export default {
data() {
return { like: false }
},
methods: {
handleToggle() {
this.like = !this.like
// localStorage.setItem('like', this.like) // 原来的写法
setItem('like', this.like)
}
},
created() {
// this.like = localStorage.getItem('like') // 原来的写法
this.like = getItem('like')
}
}
封装之后的好处:
1、使用命名空间,将一个项目中的公共状态存在一个变量内
2、读取更加方便,省去了字符串和对象之间的来回转换