vue---vux详解

  • VUEX 全局状态管理器
    • 什么样的数据需要放在vuex中?
    • 参数---详解
      • `state`
      • `geeters`
      • `mutations`
      • `actions`
      • `modules`
        • 使用
          • modules----state的使用及调用
          • modules----getters的使用及调用
          • modules----mutations的使用及调用
          • modules----actions的使用及调用
    • namespaced---命名空间
      • getters有命名空间
      • mutations有命名空间
      • actions有命名空间
    • 问题----如何在vuex中调用vuex中的方法或事件
    • 使用映射解构的方法在组件中直接调用对应事件,数据名等

VUEX 全局状态管理器

  • vue的全局状态管理器

  • 实现组件之间跨层传递数据

  • 实现数据与视图响应式更新

  • state

  • geeters

  • mutations

  • actions

  • modules

  • namespaced----命名空间

什么样的数据需要放在vuex中?

  • 需要多个组件使用的数据,或者方法

参数—详解

state

  • 相当于vue中的data,用来存储数据的,在vue组件中获取,用 $store.state.数据名字
// 数据
state: {// 这个数据写死了goods : [{"buy_limit":5,"img_url":"\/\/i8.mifile.cn\/v1\/a1\/ef617fac-7489-436d-b74e-c43582f09633.jpg","num":1,"price":899,"name":"\u5c0f\u7c73\u7535\u89c64A 32\u82f1\u5bf8","goods_id":2172700021,"select":true},{"buy_limit":1,"img_url":"\/\/i8.mifile.cn\/v1\/a1\/65be1bac-6d3f-3766-3bac-c11b3aa13b8e.webp","num":1,"price":1199,"name":"Redmi Note 7 4GB+64GB \u68a6\u5e7b\u84dd","goods_id":2185200032,"select":true},{"buy_limit":5,"img_url":"\/\/i8.mifile.cn\/a1\/pms_1514387870.88251945.jpg","num":1,"price":3599,"name":"\u5c0f\u7c73\u7b14\u8bb0\u672cAir 12.5  4G 128G \u94f6\u8272","goods_id":2175200001,"select":true}]
}
                     <!-- // 调用          goods,就是数据名字-->
<div class="good" v-for="good in $store.state.goods" :key="good.goods_id">

geeters

- `getters 从现有数据获取到新的数据`,相当于vue组件中的`computed`
- `名字 : state => { 逻辑。。。 ; return 数据}`
- 在vue组件中获取:`$store.gettes.数据名字`
// 使用
getters : {goodNum : state => {let num = 0;state.goods.forEach( item => {num += item.num;})return num;}
},
                     <!-- 调用       goodNum就是已经计算过的数据名字   --><van-tabbar-item to="/cart" icon="setting-o" :badge="$store.getters.goodNum">

mutations

  • mutations 方法,操作数据,相当于vue组件中的methods
  • 在vue组件中使用方法:$store.commit("传过来的事件名字",需要传递的参数);
// 使用
mutations: {// delGood事件名字,(state,good),state:对应state中的数据,good:对应组件传递过来的参数delGoodVuex(state,good) {var flag = window.confirm("你确定要删除码?");if(flag) {var index = state.goods.indexOf(good);state.goods.splice(index,1);}
},
// 调用
// delGood 是vue中的事件,
delGood() {// this.$store.commit 就是接收,vuex中的事件delGoodVuex,且传递参数this.good.num,this.$store.commit("delGoodVuex",this.good.num);
},

actions

  • 关于Ajax异步的方法需要放在actions中,执行异步的方法

  • actions 方法,可以执行异步操作方法,相当于vue组件中的methods

  • 在vue组件中使用:$store.dispatch("方法名字",data);

  • 使用:方法名字({commit},[参数]) { ajax方法};

actions: {// 解构mutations中的所有方法getCart({commit}) {getCartAPI().then( res => {// 已经结构了vuex中的mutations中的方法,// 所以调用初始化购物车的方法只需要:commit("方法名字",需要传输过来的数据);// 这里是因为调用了vuex本身的事件方法,所以使用此写法// 因为commit 是已经解构的方法,所以只需正确的找到需要的方法就行了,如果传参,就写参数commit("INIT_CART",res.data);}).catch( err => {console.log(err);})}
},
mutations : {// 初始化购物车的方法INIT_CART(state,goods) {state.goods = goods;}
}
  • 调用actions中的方法时
  • $store.dispatch("方法名字");
  • 方法名字:就是在actions中定义的方法的名字
// 调用actions的方法
// 在vue中调用vuex的actions中的方法
this.$store.dispatch("getCart");

modules

  • 模块
  • Vuex允许将store分割成模块(module)
  • 每一个模块都有vuex中的所有方法,statemutationsactionsgetters

使用

  • 在store文件夹下,创建modules文件夹,在其下在创建对应的vuex模块:比如:登录模块的login.js
// 登录模块的state
const state = {}
// 登录模块的getters
const getters = {}
// 登录模块的mutations
const mutations = {}
// 登录模块的actions
const actions = {}
// 导出默认的模块方法
export default {state,getters,mutations,actions}
  • 需要将模块导入vuex中,在注册
// 导入 login模块
import login from './modules/Login.js'
// 注册到vuex中
modules : {login
}
modules----state的使用及调用
  • state就是存储数据的
  • modules中的state是每个模块私有的,有命名空间
  • 调用使用:$store.state.注册的模块名.参数等
// 使用,存储数据
const state = {name : "momo",age : 20
}
<!-- 调用 --><!-- 获取vuex登录模块中的名字,年龄 -->
<p>获取vuex中的模块数据 {{$store.state.login.name}}----{{$store.state.login.age}}</p>
modules----getters的使用及调用
  • 对应的方法有三个参数,且它不是私有,默认没有命名空间
  • 参数1:state 自己这个模块的state
  • 参数2:getters 全局的getters,包括模块的getters
  • 参数3:rootState 全局的state
// 使用
const getters = {<!-- 参数1,参数2,参数3,参考以上 -->getGoods(state,getters,rootState){console.log(state,getters,rootState)return getters.goodNum;}
}
  • getters没有命名空间所以直接访问vuex中的gettser就可以访问到模块中的数据
  • $store.getters.模块中的getters中的数据名字
<!--    getters没有命名空间所以直接访问vuex中的gettser就可以访问到模块中的数据 -->
<p>getter:{{$store.getters.getGoods}}</p>
modules----mutations的使用及调用
  • 与vue中的正常使用一样
  • 模块中的mutations也是没有命名空间的,所以也可以直接使用
  • vuex中的调用mutations的方法进行调用
  • $store.commit("需要调用的模块中的方法名字",需要传递的参数)
// 使用
const mutations = {ADD_AGE(state,step=1) {state.age += step;}
}
  • 调用
  • $store.commit("需要调用的模块中的方法名字",需要传递的参数)
<!-- 调用 --><!-- 调用模块方法数据 -->
<button @click="$store.commit('ADD_AGE')">年龄加</button>
modules----actions的使用及调用
  • 用法与vuex中的差不多
  • 其中vuex中的{commit}解构vuex中的方法,模块中的{context},得到上下文中的所有方法
  • 具体情况可以自行打印查看
  • 方法名字({context},[参数]) { 逻辑 }
// 使用
const actions = {addAge(context,arg){// 这个是调用上下文中定义mutations的ADD_AGE事件context.commit("ADD_AGE",arg);var good = {"buy_limit":5,"img_url":"\/\/i8.mifile.cn\/v1\/a1\/ef617fac-7489-436d-b74e-c43582f09633.jpg","num":2,"price":8990,"name":"小米55","goods_id":2172700028,"select":true};console.log(context);// 模块访问vuex中全局的方法context.commit("addGood",good);// 模块可以访问vuex全局的statecontext.rootState.goods.pop();}
}
  • 因为没有命名空间,所以可以直接使用vuex的调用方法进行调用
  • $store.dispatch('需要调用的模块的actions方法')
<!-- 调用 --><!--  -->
<button @click="$store.dispatch('addAge')">actions年龄减</button>

namespaced—命名空间

  • namespaced : true/false
  • true:打开命名空间
  • false:反之
  • 在导出的时候添加模块的命名空间
// 导出
export default {// 命名空间namespaced : true,state,getters,mutations,actions
}

getters有命名空间

  • 参数:数据名字(state,getters,rootState,rootGetters) {逻辑; return 数据}
  • 访问:$store.getters["模块名字/数据名字"];
  • 映射方法:...mapGetters["模块名字/数据名字"]

mutations有命名空间

  • 参数:方法名字(state,参数);
  • 访问:$store.commit("模块名字/方法名字",需要传递的数据参数)
  • 映射方法:...mapMutations["模块名字/数据名字"]

actions有命名空间

  • 参数:方法名字({dispatch,commit,getters,rootGetters},参数);
  • 参数:方法名字(context,参数);
  • 访问:$store.dispatch("模块名字/方法名字",需要传递的数据参数)
  • 映射方法:...mapDispatch["模块名字/数据名字"]

问题----如何在vuex中调用vuex中的方法或事件

  • 使用:this.commit("需要调用的方法")

使用映射解构的方法在组件中直接调用对应事件,数据名等

  • 那个组件使用那个vuex中的属性就导入对应的映射方法

  • 映射方法对应:mapState,mapGetters,mapMutations,mapActions

  • 导入方法:import {对应的映射方法} from 'vuex';

  • 使用方法:...对应的映射方法(['需要调用的vuex的方法,或者数据'])

  • 原因:这样可以不用在写,$store.state.数据名等这种

  • vuex中getters 映射成vue中的computed 就是对应的使用方法需要在对用映射成的vue的方法中才能使用

  • vuex中的actions ,映射成vue中的methds

  • 需要使用时,就跟使用vue中的数据,方法一样

// 导入映射的vuex的方法// vuex中getters 映射成vue中的computed// vuex中的actions ,映射成vue中的methds
import {mapGetters,mapActions} from 'vuex';
import Bus from '@/utils/Bus.js';
export default{data(){return {isShow:true,active : 0}},computed : {...mapGetters(['goodNum'])},created(){// 因为有了映射的方法,我们就不用再使用dispatch这种了// this.$store.dispatch("getCart");this.getCart();},methods : {...mapActions(["getCart"])}
}

vue---vux详解相关推荐

  1. 七、Vue cli详解学习笔记——什么是Vue cli ,Vue cli的使用(安装,拉取2.x模板,初始化项目),Vue cli2详解,Runtime-Compiler和Runtime-only区别

    一.什么是Vue CLI 如果你只是简单写几个Vue的Demo程序, 那么你不需要Vue CLI. 如果你在开发大型项目, 那么你需要, 并且必然需要使用Vue CLI 使用Vue.js开发大型应用时 ...

  2. Linux运行脚手架vue,Linux Nodejs与vue脚手架详解

    本篇教程介绍了Linux Nodejs与vue脚手架详解,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入. < https://nodejs.org/dist/v8.9 ...

  3. vue路由详解 --基础

    vue路由详解 --基础 1.router-link 和router-view组件 router-link相当于封装了一个a标签 router-view为组件显示的位置 <router-link ...

  4. Vue实例详解与生命周期

    Vue实例详解与生命周期 http://www.jianshu.com/p/b5858f1e6e76 Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理. ...

  5. Electron vue使用详解

    Electron  vue使用详解 Electron是什么? Electron 是一个框架,可以让您使用 JavaScript, HTML 和 CSS 创建桌面应用程序. 然后这些应用程序可以打包在m ...

  6. Vue中 Vue.prototype 详解及使用——作用:避免和已被定义的数据、方法、计算属性产生冲突

    Vue中 Vue.prototype 详解及使用--作用:避免和已被定义的数据.方法.计算属性产生冲突 **应用场景:**在很多组件里用到数据/实用工具,但是不想污染全局作用域.这种情况下,可以通过在 ...

  7. 【Vue组件详解(一)】

    Vue组件详解(一) 简介 对组件的理解 传统方式编写页面 组件方式编写页面 非单文件组件 完整代码 总结 简介 组件的定义其实就是实现应用中局部功能代码(html,css,js)和资源(MP3 ,M ...

  8. vue 监控元素宽度_Vue入门系列之Vue实例详解与生命周期

    Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进行对整个Vue实例生成.编译.挂着. ...

  9. 八、Vue cli3详解学习笔记

    一.认识Vue CLI3 1.1 vue-cli 3 与 2 版本有很大区别: vue-cli 3 是基于 webpack 4 打造,vue-cli 2 还是 webapck 3 vue-cli 3 ...

  10. 05Vue.js快速入门-Vue实例详解与生命周期

    Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进行对整个Vue实例生成.编译.挂着. ...

最新文章

  1. R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值、plot.roc函数绘制ROC曲线、添加置信区间、为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来
  2. 【c语言】蓝桥杯入门训练 Fibonacci数列
  3. WCF服务端运行时架构体系详解[下篇]
  4. SaaS服务在未来云计算中该如何发展
  5. 如何对加载的数个模型只进行transform呢
  6. 将对象集合包装成JSON格式
  7. 字符串比较中NSNumericSearch选项的工作原理
  8. 【机器学习】选择模型
  9. 杰控连接mysql_杰控FameView软件首秦ERP系统L2级中的应用
  10. 人工智能的常用十种算法
  11. 使用代理软件SocksCap-v2.38H玩网络游戏
  12. kodi文件管理smb服务器,KODI win10,kodi不能发现smb共享
  13. 使用ImageJ软件计算信噪比(SNR)的小工具
  14. 金融系列-会计基础知识
  15. Ninja ripper 工具使用教程
  16. python判断火车票座位_Python3 实现火车票查询工具
  17. catkin build 工作空间锁定 —— [build] Error: Unable to find source space `/home/xxx/src`
  18. NYNU_ACM 实验室招新月赛题解
  19. SYN 洪水攻击如何工作?
  20. 如何在Win10中隐藏一个磁盘盘符

热门文章

  1. MySQL的进阶操作
  2. 项目二 管理与Linux系统
  3. 5月11日云栖精选夜读丨清华大学成功卫冕ASC18世界超算总决赛冠军,黑马上海科大斩获AI大奖...
  4. 动态阈值_传感器的动态和静态区别是什么
  5. 互联网公司招聘--58集团--前端--2017年笔试题1
  6. [学习笔记]数据挖掘-week8
  7. h5pc端分享当前网页到qq、微博
  8. 电缆桥架使用在什么地方?
  9. 错误代码: 1 1017 - Can't find file: '.\estore\user@ff1b.frm' (errno: 22)解决
  10. 转转合并找靓机,能为其野心带来“转机”吗?