在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>
代码加了注释
在vue中优雅的使用LocalStrong的更多相关文章
- 如何在Vue中优雅的使用防抖节流
1. 什么是防抖节流 防抖:防止重复点击触发事件 首先啥是抖? 抖就是一哆嗦!原本点一下,现在点了3下!不知道老铁脑子是不是很有画面感!哈哈哈哈哈哈 典型应用就是防止用户多次重复点击请求数据. 代码实 ...
- 在vue中优雅地实现简单页面逆传值
[需求] 要实现的需求很简单,页面从A -> B,用户在B触发操作,将一些数据带回到A页面,在网上找了好久也只看到有人问,但总找不到很好答案.要实现的效果图如下: [联想] 在 ios 开发中, ...
- 如何在Vue项目中优雅的使用sass
开始之前,请先确保有一个基于webpack模板的项目(vue-cli脚手架一键安装~) 1.打开项目终端,安装sass的依赖包 npm install --save-dev sass-loader / ...
- Vue.js优雅的实现列表清单的操作
一.Vue.js简要说明 Vue.js (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与前端框架Angular一样, Vue.js在设计上采用MVVM模式,当Vie ...
- Vue.js优雅的实现列表清单
一.Vue.js简要说明 Vue.js (读音 /vjuː/) 是一套构建用户界面的渐进式框架.与前端框架Angular一样, Vue.js在设计上采用MVVM模式,当View视图层发生变化时 ...
- Vue中引入bootstrap导致的CSS问题
最近在进行vue.js+webpack进行模块化开发的时候,遇到一个奇怪的问题. 问题是这样的: 1. 在main.js文件中引入bootstrap的js和css. 2. 自己写了一个Header.v ...
- 详解Vue中的nextTick
Vue中的nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下.其中关于nextTick的源码涉及到不少知识,很多不太理解,暂且根据自己的一些感悟介绍下nextTick. 一. ...
- vue中如何不通过路由直接获取url中的参数
前言:为什么要不通过路由直接获取url中的参数? vue中使用路由的方式设置url参数,但是这种方式必须要在路径中附带参数,而且这个参数是需要在vue的路由中提前设置好的. 相对来说,在某些情况下直接 ...
- vue中的重要特性
一.vue中的自定义组件 html的代码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...
随机推荐
- css之-webkit-scrollbar
在IE中可以自定义滚动条的样式 ,基于webkit的浏览器现在也可以自定义其样式: ::-webkit-scrollbar { /* 1 */ } ::-webkit-s ...
- [hadoop读书笔记] 第三章 HDFS
P49 当数据集的大小超过一台计算机存储能力时,就有必要对数据集分区(partition)并将分区存储到若干台独立的计算机上. 管理网络中跨多台计算机存储的系统就叫分布式文件系统 Distribut ...
- 5、QT分析之网络编程
原文地址:http://blog.163.com/net_worm/blog/static/127702419201002842553382/ 首先对Windows下的网络编程总结一下: 如果是服务器 ...
- ZARM in Linux & MIUI
zram是Linux内核的一个模块,之前被称为“compcache”.zram通过在RAM内的压缩快设备上分页,直到必须使用硬盘上的交换空间,以避免在磁盘上进行分页,从而提高性能.由于zram可以用内 ...
- Android下ListView上下滑动背景变黑
老问题,Google一下就能找到N多答案,为方便自己日后查阅,记录如下: 手指在ListView上下滚动时,ListViewItem背景变黑,因为在滚动的时候为了提升性能做了优化,为提高滚动的性能,A ...
- linux之sshfs
1.挂载 sshfs -p shiyu@ml.cs.tsinghua.edu.cn:/mfs/shiyu/ ~/mfs 2.卸载 fusermount -u ~/mfs
- Form 表单验证
#!/usr/bin/env python # -*- coding:utf- -*- import tornado.ioloop import tornado.web import re class ...
- VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例
一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...
- nginx rewrite和根据url参数location
最近项目中涉及到旧老项目迁移,需要在nginx上做些配置,所以简单学习了下,好记性不如烂笔头,先记下来. rewrite 首先查看下nginx是否支持rewrite: ./nginx -V 不支持说明 ...
- C# 在托盘显示图标
//上面一行是主窗体InitializeComponent()方法中需要添加的引用 this.SizeChanged += new System.EventHandler(this.Form1_Siz ...