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实现数据共享的更多相关文章

  1. Vue2.5开发去哪儿网App 城市列表开发之 Vuex实现数据共享及高级使用

    一,数据共享 1.  安装: npm install vuex --save 2. 在src目录下 新建state文件夹,新建index.js文件 3. 创建一个 store import Vue f ...

  2. vuex实现数据共享

    1.store.js结构 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Sto ...

  3. vue中vuex实现持久化的几种方法

    前提:大家都知道vuex真的数据共享是不持久的,例如登录后一刷新,state中存的token就会消失,导致你需要再次进行登录操作 在这给大家列出几种解决方案: 第一种(也是一些项目中常使用的):使用缓 ...

  4. Vue全局API总结

    1.extend用于创建一个子类Vue,用$mount来挂载 <body> <div id="app"></div> <script> ...

  5. vue中mixin的一点理解

    vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情况下引入组件有什么区别?     ...

  6. Vue2.5开发去哪儿网App 从零基础入门到实战项目

    第1章 课程介绍本章主要介绍课程的知识大纲,学习前提,讲授方式及预期收获. 1-1 课程简介 试看第2章 Vue 起步本章将快速讲解部分 Vue 基础语法,通过 TodoList 功能的编写,在熟悉基 ...

  7. vue全家桶面试

    vue:主要Vue ​ vue-router:关于路由方面的配置 ​ vuex:数据共享和缓存用 ​ vue-resource:于后台交互用(现在改为axios 但是axios不是Vue里面的东西) ...

  8. Vue.js开发去哪儿网WebApp

    一.项目介绍 这个项目主要参考了去哪儿网的布局,完成了首页.城市选择页面.详情页面的开发. 首页:实现了多区域轮播的功能,以及多区域列表的展示: 城市选择页面:在这个页面实现了城市展示.城市搜索.城市 ...

  9. uniapp自定义简单省市区联动组件

    又双叒一个uniapp组件 最近有一个选择地址的需求,就写了一个省市区联动选择器. 选择日期使用的picker,就照着它简单的整了一个,使用网络请求城市数据,还用到了vuex组件数据共享. 本来自己整 ...

随机推荐

  1. idea跑mapreduce结果为空白文本,idea代码被莫名其妙地改动了

    遇到如题的错误, 一开始查找Step1Main.java的代码错误,尝试关掉分区设置,还是一样. 后来以为是mapper或reducer不执行,网上查找了半天也没有正确原因. 最终,偶然间看到redu ...

  2. xcode windows版安装使用教程

    随着iPhone.iPad.Mac等苹果产品越来越火爆,越来越多的初学者想要了解和尝试苹果平台,包括苹果操作系统Mac OS X.苹果演示软件Keynote.苹果开发工具Xcode等.然而,苹果电脑价 ...

  3. R 读取回归模型的信息

    参考博客: http://blog.sina.com.cn/s/blog_8f5b2a2e0101fmiq.html https://blog.csdn.net/huangyouyu523/artic ...

  4. 03.swoole学习笔记--web服务器

    <?php //创建web服务器 $serv=); //获取请求 /* * $request:请求信息 * $response:响应信息 */ $serv->on('request',fu ...

  5. 009、Java中超过了int的最大值或最小值的结果

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  6. 004.Oracle数据库 , 查询多字段连接合并

    /*Oracle数据库查询日期在两者之间*/ SELECT PKID , OCCUR_DATE, PKID || TO_CHAR( OCCUR_DATE, ' yyyy/mm/dd hh24:mi:s ...

  7. spring core:@AliasFor的派生性

    spring对Annotation的派生性应用可谓炉火纯青,在spring core:@Component的派生性讲过支持层次上派生性,而属性上派生的需求则借助了@AliasFor,它是从spring ...

  8. pyhton scipy最小二乘法(scipy.linalg.lstsq模块)

    最小二乘法则是一种统计学习优化技术,它的目标是最小化误差平方之和来作为目标J(θ)J(θ),从而找到最优模型. 7. SciPy最小二乘法 最小二乘法则是一种统计学习优化技术,它的目标是最小化误差平方 ...

  9. Atcoder比赛副站

    https://agc039.contest.atcoder.jp/

  10. Redis混合存储-冷热数据识别与交换

    Redis混合存储产品是阿里云自主研发的完全兼容Redis协议和特性的混合存储产品. 通过将部分冷数据存储到磁盘,在保证绝大部分访问性能不下降的基础上,大大降低了用户成本并突破了内存对Redis单实例 ...