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组件数据共享. 本来自己整 ...
随机推荐
- git使用问题一新建本地仓库添加远程合并推送
1,git远程新建仓库demo 2,git本地初始化仓库demo 3,git本地添加远程仓库 git remote add <name> <url> 4,git把远程仓库pul ...
- SpringMVC一点简单地源码解析
. 1.1 init(初始化) 在第一次发出请求时,会调用HttpServletBean 的init()方法 org.springframework.web.servlet.HttpServletBe ...
- SelectList类的构造函数
SelectList类的构造函数 2016年05月23日 17:29:52 FrankyJson 阅读数 272 标签: MVC函数 更多 个人分类: MVC SelectList 构造函数 (I ...
- Redis原理详解
Redis原理详解 数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redi ...
- 在web.xml中可以设置jsp标签吗?
<jsp-config> <taglib> <taglib-uri>http://java.sun.com/jstl/core</taglib-uri> ...
- jenkins#构建并部署springboot的jar包
0. 前提是有一个可以用的没有问题的Jenkins环境,这是基础 1. 安装publish over ssh 插件,(如果网速太慢,请去github 克隆代码,然后自己构建,然后上传安装此插件) 2. ...
- Day4 - D - Watchcow POJ - 2230
Bessie's been appointed the new watch-cow for the farm. Every night, it's her job to walk across the ...
- bean的autowire属性及其生命周期
一:sutowire属性 1.no:默认值,禁用自动装配: 2.byName:根据属性名称自动装配: 3.byType:根据属性类型自动装配: 4.constructor:通过构造方法自动装配,不推荐 ...
- Shell脚本之awk篇
目录:一.概述二.awk基本语法格式三.awk基本操作四.awk条件及循环语句五.awk函数六.awk演示示例(源自于man手册) 一.概述 1. 产品概述: awk是一种编程语言,用于在linux/ ...
- 降维之奇异值分解(SVD)
看了几篇关于奇异值分解(Singular Value Decomposition,SVD)的博客,大部分都是从坐标变换(线性变换)的角度来阐述,讲了一堆坐标变换的东西,整了一大堆图,试图“通俗易懂”地 ...