part7 vuex实现数据共享
vuex 是数据框架(一个插件)(单项数据的改变流程,组件改数据必须先调Action用dispatch方法)
大型项目vue只能承担视图层的主要内容
大量数据传递的时候,往往需要一个数据框架辅助
例子:多个组件之间的传值很困难的时候,如果我们能吧公用的数据放在一个公共的空间
存储,然后某一个组件改变了数据,其他组件能够感知
start
1.因为vuex做的文件还是比较复杂的,所以我们先创建一个单独的文件夹
/src/store/index.js
import Vue from 'vue'
import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({})
2.然后在main.js中引入,便可在所有组件中使用
import store from ''./store"
new Vue({
store, //传进根实例
})
3.组件中使用
{{this.$store.state.city}}
4.组件中改变数据
首先组件中调用VUEX中的Actions 用 dispatch方法
然后actions调用Mutations用commit方法
this.$store.dispatch('changeCity', city) //city为数据 ,派发一个名字叫changCity这样一个Action
//Action需要写在 Store中
export defalut new Store({
state: {}
action: {
chageCity (ctx, city) {}
ctx.commit('chageCity', city) //ctx为执行上下文
}
mutations: {
changeCity('state','city') {
state.city = city
}
}
})
当数据比较简答的时候 可以直接调用mutations
this.$store.commit('changeCity', city)
页面跳转方法
1.a标签
<router-link to="/"> </router-link>
2.js window.location.href
this.$router.push('/')
本地存储(页面刷新后,内容不变)
如果用户关闭了本地存储功能活着隐身模式 就不能用localstorage
所以对于使用localstorage 要做错误捕获,不用处理
我做错
try {
var lastCity = localStorage.city || '上海'
} catch (e) { } //如果隐身模式,loacalstarage.city 就会报错 不会传旨‘sh’
修正后
var lastCity = '上海'
try {
if (localStorage.city) {
lastCity = localStorage.city
}
} catch (e) { }
vuex 高级用法
1.当index文件庞大之后,可以拆分 state mutations 文件组件化
1.创建state.js 文件
然后 export default {}
然后 index.js import 一下
2.模板中引用的state数据太长 我们可以用高级api
import { mapState } from 'vuex'
computed: {
...mapState(['city'])
}
//然后模板中直接 this.city就可以了
import { mapState } from 'vuex'
computed: {
...mapState({
currentCity: 'city'
})
}
//也可以
3相同的script标签中用的 调用matations也可以简化
import { mapState, mapMutations } from 'vuex'
computed: {
...mapState(['city'])
}
methods: {
handleClick (city) {
this.changeCity(city)
}
...mapMutations(['changeCity']) //我们又一个mutations叫 changeCity,
我们把它映射到 changecity的方法里 那么我们要调用这个macations
4.getters
//index.js film
export default new Vuex.Store({
getters: {
doubleCity(state) {
return state.city + ""
}
}
})
//当我们需要根据state计算新的数据.避免数据冗余,类似computed
import { mapState,mapGetters } from 'vuex'
computed: {
...mapState(['city']),
...mapGetters('doubleCity')
}
//然后模板中直接 this.city就可以了
import { mapState } from 'vuex'
computed: {
...mapState({
currentCity: 'city'
})
}
//也可以
5.非常复杂的业务场景,管理后台系统的时候,很多公用数据在vuex中储存
借助module复杂的motations Actions 拆分
const moduleA = {
state: { ... },
mutations: { ... },
actions: { ... },
getters: { ... }
}
const moduleB = {
state: { ... },
mutations: { ... },
actions: { ... }
}
const store = new Vuex.Store({
modules: {
a: moduleA,
b: moduleB
}
})
store.state.a // -> moduleA 的状态
store.state.b // -> moduleB 的状态
part7 vuex实现数据共享的更多相关文章
- Vue2.5开发去哪儿网App 城市列表开发之 Vuex实现数据共享及高级使用
一,数据共享 1. 安装: npm install vuex --save 2. 在src目录下 新建state文件夹,新建index.js文件 3. 创建一个 store import Vue f ...
- vuex实现数据共享
1.store.js结构 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Sto ...
- vue中vuex实现持久化的几种方法
前提:大家都知道vuex真的数据共享是不持久的,例如登录后一刷新,state中存的token就会消失,导致你需要再次进行登录操作 在这给大家列出几种解决方案: 第一种(也是一些项目中常使用的):使用缓 ...
- Vue全局API总结
1.extend用于创建一个子类Vue,用$mount来挂载 <body> <div id="app"></div> <script> ...
- vue中mixin的一点理解
vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情况下引入组件有什么区别? ...
- Vue2.5开发去哪儿网App 从零基础入门到实战项目
第1章 课程介绍本章主要介绍课程的知识大纲,学习前提,讲授方式及预期收获. 1-1 课程简介 试看第2章 Vue 起步本章将快速讲解部分 Vue 基础语法,通过 TodoList 功能的编写,在熟悉基 ...
- vue全家桶面试
vue:主要Vue vue-router:关于路由方面的配置 vuex:数据共享和缓存用 vue-resource:于后台交互用(现在改为axios 但是axios不是Vue里面的东西) ...
- Vue.js开发去哪儿网WebApp
一.项目介绍 这个项目主要参考了去哪儿网的布局,完成了首页.城市选择页面.详情页面的开发. 首页:实现了多区域轮播的功能,以及多区域列表的展示: 城市选择页面:在这个页面实现了城市展示.城市搜索.城市 ...
- uniapp自定义简单省市区联动组件
又双叒一个uniapp组件 最近有一个选择地址的需求,就写了一个省市区联动选择器. 选择日期使用的picker,就照着它简单的整了一个,使用网络请求城市数据,还用到了vuex组件数据共享. 本来自己整 ...
随机推荐
- Oralce给字段追加字符,以及oracle 给字段替换字符
追加字符 update table_name t set t.DIST_NAME = t.DIST_NAME || '市' where PROD_NAME='爱立信' table_name :表名 ...
- 2013蓝桥杯预赛C/C++本科B组
题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯 ...
- 011、Java中将范围大的数据类型变为范围小的数据类型
01.代码如下 package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 关于 CDN 负载均衡 网页请求过程等
链接 1 [转]浅谈一个网页打开的全过程(涉及DNS.CDN.Nginx负载均衡等) https://www.cnblogs.com/xuan52rock/p/6845637.html 2 闲话 C ...
- SpringBoot-数据库连接信息配置
SpringBoot-数据库连接信息配置 SpringBoot-数据库连接信息配置 在SpringBoot中提供了默认的数据库连接器-追光者HikariCP,我们只需要添加jdbc的启动器就会自动 ...
- P1051复数乘法
P1051复数乘法 转跳点:
- 【Linux】linux内核学习
linux内核获取 官网: https://www.kernel.org/ Linux操作系统的核心是模块化,可以使用lsmod命令查看内核模块,下面展示已载入系统的模块: [root@172.16. ...
- CharacterEncodingFilter这个spring的过滤器
org.springframework.web.filter.CharacterEncodingFilter 对请求于响应的编码进行过滤,半路出家的和尚总是对什么都感觉到好奇,都想记录下来(
- 061-PHP函数定义默认参数
<?php function add($x=2,$y=3){ //定义函数并设置默认参数 return $x+$y; } echo add(); //不传入参数调用add函数add(2,3) e ...
- vue左侧菜单的实现
后端实现 django视图def menu(request): menu_list = models.Menu.objects.all().values('id', 'menu_name', 'par ...