本地存储 使用localStorage 存储数据

新建项目(不知道怎么新建项目?参考文章:vue-cli3 搭建vue项目

目录结构

界面显示


添加store.js

export default {
  fetch: (key) => JSON.parse(window.localStorage.getItem(key)),
  save: (data, key) => window.localStorage.setItem(key, JSON.stringify(data)),
};

将两个操作localStorage的函数export出去。
需要在使用的时候import进来。

App.vue代码编写

html

<template>
	<div id="app">
		<div class="wrap">
			<input type="text" v-model="keyword" @keydown.enter="addData" />
			<ul v-if="list.length">
				<li
					v-for="(item, index) in list"
					:key="index"
					@click="changeState(index)"
					:class="{complete: item.state}"
				>{{ item.txt }}</li>
			</ul>
		</div>
	</div>
</template>

script

import store from "./common/store"; // 引入store模块

const STORAGE_KEY = "my-key";

export default {
	name: "app",
	data() {
		return {
			keyword: "",
			list: store.fetch(STORAGE_KEY) ? store.fetch(STORAGE_KEY) : [], // 从本地存储中获取数据
		};
	},
	components: {},
	mounted() {},
	methods: {
		// 添加数据
		addData() {
			this.list.push({
				txt: this.keyword,
				state: false,
			});
			this.keyword = "";
		},
		// 点击后改变状态
		changeState(index) {
			this.list[index].state = !this.list[index].state;
		},
	},
	watch: {
		// 这里监听整个list数据的变化,避免每次修改数据的时候都需要进行本地存储
		list: {
			handler() {
				store.save(this.list, STORAGE_KEY); // 写入本地存储
			},
			deep: true, // 切换为false之后,点击切换状态,刷新看效果,未触发watch。
		},
	},
};

css

*{margin: 0;padding: 0;}
.wrap {width: 80%;margin: 0 auto;}
input {height: 30px;width: 100%;}
li {
	height: 30px;
	line-height: 30px;
	background: #e2e2e2;
	margin: 4px 0;
	cursor: pointer;
	list-style-type: none;
	padding: 0 10px;
}
li.complete {background: #5cce5c;color: #fff;}
posted @ 2020-01-08 18:29  汇品铺子  阅读(1114)  评论(0编辑  收藏  举报