-
data 获取vuex_Vue之数据状态管理器Vuex
2021-01-05 21:37:22前文中我们总结了如何在父子组件中进行参数传递,实现相对简单但是开发中使用更为频繁的却是页面传参或者是无关联组件传参,这是就需要使用到Vuex数据状态管理器了2、什么情况下我应该使用 Vuex?如果您不打算开发...1、什么是Vuex
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
前文中我们总结了如何在父子组件中进行参数传递,实现相对简单
但是开发中使用更为频繁的却是页面传参或者是无关联组件传参,这是就需要使用到Vuex数据状态管理器了
2、什么情况下我应该使用 Vuex?
如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。
3、Vuex的设计模型
4、基本概念
state 相当于VUE中data 存储数据
getters 相当于VUE中computed 计算属性
mutations 相当于VUE中methods方法
actions 用于异步执行mutations
5、组件绑定辅助函数
mapState、mapGetters、mapActions、mapMutations
目的是将vuex中定义的state、getters混入到vue的computed中
将vuex中定义的mutaions、actions混入到vue中的methods中
所有的辅助函数均接受列表或者字典格式参数
字典格式可以将vuex中定义的属性名进行重写命名
全局注册Vuex中的辅助函数可以大量减少代码的编写
6、Vuex使用案例大全:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="lib/vue.js" type="text/javascript" charset="utf-8"></script> <script src="lib/vuex.js" type="text/javascript" charset="utf-8"></script> </head> <body> <div id="app"> 通过state获取: {{$store.state.num}} <br> 使用mapState 获取:{{_num}} <br> <br><br> 使用getters获取:{{$store.getters.getNum}} <br> 使用mapGetters 获取:{{_getNum}} <br> <br><br> <span @click="addNumByMutation(5)">通过mutations方法设置(不推荐)</span> <br> <span @click="_addNum(5)">通过mapMutations方法设置(不推荐)</span> <br> <br><br> <span @click="reduceNumByAction(5)">通过actions方法设置(推荐)</span> <br> <span @click="reduceNumAsync(5)">通过mapActions方法设置(推荐)</span> </div> <script type="text/javascript"> let store = new Vuex.Store({ state:{ num:10 }, getters:{ getNum(state){ return state.num; } }, mutations:{ addNum(state,num){ state.num+=num } }, actions:{ reduceNumAsync(context,num){ context.commit("addNum",-num) } }, }) const vm = new Vue({ el:"#app", data:{ }, store, methods:{ addNumByMutation(num){ this.$store.commit("addNum",num); }, // 使用对象展开运算符将mutations对象混入到methods 对象中 使用this.addNum() 代替this.$store.commit("addNum"); // ...Vuex.mapMutations(["addNum"]), // 使用对象格式对mutations属性命名 ...Vuex.mapMutations({"_addNum":"addNum"}), reduceNumByAction(num){ this.$store.dispatch("reduceNumAsync",num).then((a,b)=>{ console.log("减法完毕"); }) }, // 使用对象展开运算符将actions对象混入到methods 对象中 使用this.addNum() 代替this.$store.commit("addNum"); ...Vuex.mapActions(["reduceNumAsync"]), // 使用对象格式可以对actions属性重命名 ...Vuex.mapActions({"_reduceNum":"reduceNumAsync"}) }, computed:{ // 使用对象展开运算符将state对象混入到computed 对象中 使用_num 代替this.$store.state.num // ...Vuex.mapState(["num"]), // 使用对象格式可以对state属性重命名 ...Vuex.mapState({_num:"num"}), // 使用对象展开运算符将 getter 混入 computed 对象中 使用个体 _getNum 代替this.$store.getters.getNum // ...Vuex.mapGetters(["getNum"]), // 使用对象格式可以对getter属性重命名 ...Vuex.mapGetters({_getNum:"getNum"}), } }) </script> </body> </html>
-
vue vuex 挂载_Vue中Vuex的详解与使用(简洁易懂的入门小实例)
2020-12-19 11:44:235、getters =》getters 和 组件的 ...注释也写了,getters 可以实时监听state值的变化(最新状态)我给getters里面获取count值的方法命名为 getCount 并且需要传入 state那么如何获取 通过 getters 获取 承载变化的 co...5、getters =》getters 和 组件的 computed 类似,方便直接生成一些可以直接用的数据。当组装的数据要在多个页面使用时,就可以使用 getters 来做。
注释也写了,getters 可以实时监听state值的变化(最新状态)
我给getters里面获取count值的方法命名为 getCount 并且需要传入 state
那么如何获取 通过 getters 获取 承载变化的 count 的值呢?
this.$store.getters.getCount 具体效果在 第4 栏里面有些,这里就不作重复了。
6、那么, 我们如果想改变 count 的值,应该怎么做呢? 这时候就可以用到 mutations 。
要修改store中的值唯一的方法就是提交mutation来修改,我们现在Hello World.vue文件中添加两个按钮,一个加1,一个减1;
这里我们点击按钮调用add(执行加的方法)和del(执行减法的方法),然后在里面直接提交mutations中的方法修改值:
修改store.js文件,添加mutations,在mutations中定义两个函数,用来对count加1和减1,
这里定义的两个方法就是上面commit提交的两个方法如下:
我们可以将参数传递给mutations中的函数进行计算 这里是 num 。
现在我们看看效果 :
很好,count 数值都发生了改变,我点击了两下,并且 是可以在 Vue Devtools 中的 Vuex 看到过程效果
payload :1 就是数值变化1 type 操作的方法是 addCount 也就是 mutations 根方法
ok!完美。
7、到了 Actions 了
Action 类似于 mutation,不同在于:
Action 提交的是 mutation,而不是直接变更状态。
Action 可以包含任意异步操作。
我们来看一下:
然后我们去修改Hello World.vue文件:
这里我们把commit提交mutations修改为使用dispatch来提交actions;我们点击页面,效果是一样的。
现在让我们来看看效果,这里我又点击了6下,很显然,效果是一样的。
注意,当实际写项目的时候 里面未必直接传的是 数字1 可能是对象啊 或者字符串啊。所以这个时候就要注意了,我举个例子:
这里写个 input 输入框 双向绑定一个 something 记得在 data 里面初始化一下,
然后,我们将something 传入这个方法里面 add(something)
这个时候,看着好像没有什么问题,那么问题这时候就来了,我们先试试点加号会发生什么?
我点击了三下加号,看到没,直接在 0后面拼接了111 变成0111 这显然不是我们想要的效果了,这是为什么呢?
我们来打印一下 这个 1 的数据类型
原来如此,这个是字符串类型,难怪不能直接加,那么现在我们该怎么办呢?当然是 字符串转换成数字啦 parseInt()
当然是 字符串转换成数字啦 哈哈哈哈哈哈 parseInt(); 方法 然后继续打印结果
好了,现在就是数字类型了,那么我们继续最后一步,并且看看效果吧
这里我点击了三下,结果成功的变成了 6.
8、来看一下 Vuex 里面的好东西,辅助函数 mapState、mapGetters、mapActions
如果我们不喜欢这种在页面上使用“this.$stroe.state.count”和“this.$store.dispatch('funName')”这种很长的写法,
那么我们可以使用mapState、mapGetters、mapActions就不会这么麻烦了;
并且我们配合 ... 拓展符 一起使用。
正常显示,效果是一样的,我们就可以不再使用很长的写法来调用了。
-
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2020-12-12 14:44:25现在我的App.vue里面有一个头部的公共组件,头部组件里有一个输入框,当我输入词条时,将词条传进App.vue里的里的.vue页面,并进行查询获取数据 解决思路如下: 1.如何拿到头部的词条 2.当词条改变时如何触发.vue里... -
vue 父页面调用子页面方法 返回数据_Vue如何在父组件页面的方法事件中控制子组件中的值...
2021-01-12 06:00:45在Vue中,通常会自定义组件来实现页面上的渲染。...第一种:通过vuex存储数据来控制值(1)现在假设一个场景:通过自定义组件写一个年月日或者省市区的控件,然后在父组件中,需要通过保存按钮获取子...在Vue中,通常会自定义组件来实现页面上的渲染。页面需求中可能会有需要通过页面点击事件来控制各个板块的值,那么如何在父组件的事件中来控制自定义子组件的值呢?我这里总结了我用到的两种方法。
1、通过vuex存储数据来控制值;
2、通过dom页面调用子组件中的事件。
第一种:通过vuex存储数据来控制值
(1)现在假设一个场景:通过自定义组件写一个年月日或者省市区的控件,然后在父组件中,需要通过保存按钮获取子组件的值。还要通过清空按钮改变子组件中的值,使其值达到初始值或空值的状态。
代码直接上:
父组件:
清空
提交
子组件:
父组件页面中,外部获取到数据之后,通过设置数据的时间,将值存入vuex中。
通过点击清空按钮,通过清空数据的事件,改变vuex中相应的值。
然后定义store中的js文件:
这样定义了清空和设置的事件之后,就可以在父页面去相应的改变值了。
第二种:通过dom页面调用子组件中的事件
代码直接上:
父组件:
父组件中点击事件时,通过操作dom来进行子组件事件的调用。
this.$refs.input.clearInput();
子组件中定义清空数据的方法:
methods: {
clearInput(){this.inputNumber = '';
}
}
总结:父组件可以通过dom使用子组件的事件(方法)
这是我想到的两种方法来优化自定义组件的值控制问题。因为vuex知识比较薄弱,只是简单的尝试了一个demo,可能有一些出错的地方或说法,仅作为自己的学习记录。大神勿喷~~~
-
axios如何在nodejs项目里封装_基于Vue2.0+Vuex+Axios+NodeJs+Express+MySQL实现京东移动web商城...
2021-01-17 01:15:28经过一个多月总算完成第一个版本前端架构页面结构(H5,CSS3,原生JS)框架(基于Vue脚手架:vue-cli)进行搭建数据请求处理框架(Axios)Vue-Router进行路由处理Vue-LazyLoad进行图片赖加载服务端架构选用NodeJs进行后台开发...经过一个多月总算完成第一个版本
前端架构
页面结构(H5,CSS3,原生JS)
框架(基于Vue脚手架:vue-cli)进行搭建
数据请求处理框架(Axios)
Vue-Router进行路由处理
Vue-LazyLoad进行图片赖加载
服务端架构
选用NodeJs进行后台开发
Express中间件进行服务的配置,路由、请求的处理
Mysql中间件处理与数据库的"通信"
Body-Parser中间件进行前端请求参数的获取
Cookie-Parser、Cookie-Session进行cookie与session的处理
数据库选取
采用MySQL进行相关数据库的设计与实现
目前项目已实现功能
首页数据的展示
分类页数据的展示
购物车
我的
注册
登录
商品详情页
商品搜索
PC端仿京东首页
安装
已安装MySQL数据库,然后导入migou.sql文件
然后通过npm安装本地服务第三方依赖模块(需要已安装Node.js)
cd vue-jd
npm install 或 cnpm install(个人比较喜欢使用后者,下载依赖模块速度较快)
npm run dev
最后开启后台服务
node server.js
目录结构
.
├── README.md
├── libs // 后台常用工具模块的封装,比如格式化事件、MD5加密等
├── route // 后台接口的编写目录
├── server.js // 后台服务的配置文件
├── webpack.config.js // webpack配置文件
├── index.html // 项目入口文件
├── package.json // 项目配置文件
├── src // 生产目录
│ ├── assets // css js 和图片资源
│ ├── components // 各种Vue组件
│ ├── store // vuex状态管理器
│ ├── App.vue // 项目中全局Vue
│ ├── main.js // Webpack 预编译入口
│ └── router.config.js // vue路由配置文件
项目效果图
....未完待续 QQ交流群:526450553
-
前端技术之:如何在vuex状态管理action异步调用结束后执行UI中的方法
2019-11-08 08:04:17例如,我们在页面初始化的时候,需要从服务端通过API接口获取数据,数据获取成功前需要显示Loading状态框,数据获取完成后,需要将Loading状态框隐藏。 这是一种相对比较简单的应用场景,解决起来当然也比较简单。 ... -
vue 组件监听页面切换_vue App.vue里的公共组件改变值触发其他组件或.vue页面监听...
2020-12-29 07:49:21当词条改变时如何触发.vue里的请求数据事件解决方案我是用vuex数据仓库来存储词条的,当词条改变时,修改数据仓库里的词条然后在.vue页面里监听这个词条,当词条改变时触发请求数据的事件代码数据仓... -
vue 组件监听页面切换_vue App.vue中的公共组件改变值触发其他组件或.vue页面监听...
2020-12-29 07:49:22当词条改变时如何触发.vue里的请求数据事件解决方案我是用vuex数据仓库来存储词条的,当词条改变时,修改数据仓库里的词条然后在.vue页面里监听这个词条,当词条改变时触发请求数据的事件代码数据仓... -
keep-alive + vuex + vue-router 实现动态缓存 h5 页面
2019-06-16 04:50:07在公司使用 vue 写 h5 已经一年多了,想着总结下期间...下面有这样一个需求,用户从首页 A 进入某个列表页 B 时需要实时获取最新的数据,然后点击某条消息进入详情页 C,再返回列表页 B 时,希望能够直接利用缓存数... -
如何从Vue中设值和获取值的方法?
2019-08-16 19:25:56Vuex的初始知识点:1. 了解vuex中的各个js文件的用途2.vuex使用步骤3. 利用vuex存值4. 利用vuex取值5. Vuex的同步和异步加载问题6. 综合实例操作 知识点: 1. 了解vuex中的各个js文件的用途 官方解释:Vuex 是一个专... -
vue 加载页面时触发时间_vue如何在页面刷新时保留状态信息
2020-12-20 10:44:37页面刷新成功后再次从本地存储中读取state数据// vuex中的数据发生改变时触发localStorage的存储操作localstorage.setItem('state', JSON.stringify(this.$store.state))// 页面加载的时候在created中获取本地存储中... -
vue如何在页面刷新时保留状态信息
2020-12-03 12:21:21vue如何在页面刷新时保留状态信息 本篇转载至来自简书,仅供自己学习用。 1、通过本地存储 state中的数据,页面刷新成功后再次从本地存储中读取state数据 // vuex中的数据发生改变时触发localStorage的存储操作 ... -
Vuex怎么使用
2018-09-04 10:47:11第一步,安装vuex npm i vuex -S ...例如获取state里面的num的数据: 第一步在main.js里面 第二步:在随便一个vue页面里面写入以下内容 就这样num的数量就获取到了 如何改变num值呢,例... -
local storage 和 vuex的区别
2019-06-26 23:21:04因此一开始使用了vuex进行数据存储并获取,一开始工作的十分流畅,但当我页面跳转之后,我发现vuex里面所有的数据都消失了。因此写这篇文章来记录自己遇到的这个坑。 vuex 存储在内存,localstorage则以文件的形式... -
vue如何从外部修改组件内部的变量的值
2018-11-24 16:25:181、首先是如何给你定义的变量拿到数据: 这里我自己用的是vuex: 首先在你项目的src文件夹下创建这么一个目录: 之后就要在index.js...以上就是获取数据的步骤,之后就是在页面中拿到这个获取到的数据: 首... -
vue实现从外部修改组件内部的变量的值
2021-01-19 02:40:44以上就是获取数据的步骤,之后就是在页面中拿到这个获取到的数据: 首当其冲不可少的就是引用,引用vuex和引用组件: 之后在页面的jascript中的export default中定义组件,获取数据: 用这个方式在页面中引用组件... -
vue 组件间的通信,子组件向父组件传值的方式总结
2020-07-29 10:29:20写vue,如果页面涉及到多个组件,就会涉及组件之间的通信,可能是父子组件间的通信,也可以是同级组件间的通信,那么,vue里面的组件如何通信。一般来说在vue的数据传递是在父组件传子组件通过属性来传,子组件传父... -
vue面试题(五)
2020-11-02 19:23:19vue中哪些方法可以实现页面之间传参,且如何获取到值?vue-router 基本使用步骤?请说明在vue中组件之间如何进行数据传递? 面试题 vue中key值的作用? 在v-for时使用,标识组件的唯一性,更好的区分组件,高效的更 -
子组件的数据更多的是来自于父组件,父组件的数据主要是其本身发起的ajax请求。本项目中ajax请求库使用的是axios。 状态管理 目前的状态管理采用vuex。由于vuex可以分多个子module。所以在不同模块下单独维护一份...
-
Vue必知必会
2020-10-17 09:56:28VueVue原理MVVMMVC区别双向绑定原理Vue生命周期生命周期Vue常用生命周期钩子首次页面加载会触发哪些钩子Vuex组成使用场景优点Vue-Routerkeep-alive作用Vue路由使用步骤active-class定义动态路由/获取传递动态参数vue... -
vue项目实战爬坑小记002
2017-06-28 20:47:001.如何使用vuex来保存数据(需要...step1: 新建store.js作为初始化vuex的主文件,可在里面创建state对象,缓存数据字段,初始化vuex, 目录结构如下: store.js代码如下: 1 import Vue from 'vue'; 2 i... -
(在答案,为你推介获取正确信息的指南,也作为你披荆斩棘的引路人) In Answer, you can easily find friends who have been in the same predicament. all the people on the street (在答案,你可以轻易找到曾经历...
-
点击users/components/public/header/user.vue文件中的退出后跳转到退出页(page/exit.vue)之后,自动的去执行退出操作所以利用middleware机制,触发这个获取退出的接口,让接口响应完之后,我们再做自动化的执行动作...
-
Vue 项目架构设计与工程化实践
2021-01-08 14:30:50<ul><li>service/ - 处理服务端返回的数据(类似data format),例如 service 同时调用了不同的api,把不同的返回数据整合在一起在统一发送到 store 中</li></ul> <h3>API 层 <ul><li>api/ ... -
3.JavaScript的数据类型及其检测 4.JavaScript数据类型转换 5.深入理解JavaScript作用域和作用域链 6.深入理解JavaScript执行上下文和执行栈 7.细说数组常用遍历的方法 8.浅拷贝与深拷贝 9.深入浅出...
-
猫眼电影的票价经过加密了,返回的数据为其实这就是电影的票价,不过猫眼通过动态生成@font-face来将数据还原成正常的数字。小程序有wx.loadFontFace来动态添加字体,但是需要字体链接,而...
-
当网络较慢,网页还在加载 Vue.js ,而导致 Vue 来不及渲染,这时页面就会显示出 Vue 源代码。我们可以使用 v-cloak 指令来解决这一问题。 <div id="app" v-cloak> <h2>{{message}}</h2> </...
-
前台页面请启动基于Vue的 xboot-front 项目,并修改其接口代理配置 温馨提示:若更新代码后报错,请记得更新sql并清空Redis缓存 开发指南及相关技术栈文档 项目基本配置和使用相关技术栈文档【必读】 如何使用...
-
openstack添加网络服务
-
小学数学方程的意义PPT课件.ppt
-
中央广播电视大学《综合英语3》期末总复习资料(含答案).pdf
-
高防CDN有什么好处?能防哪些攻击?
-
mysql数据类型及占用字节数
-
零基础一小时极简以太坊智能合约开发环境搭建并开发部署
-
JZ28 数组中出现次数超过一半的数字
-
@RestControllerAdvice异常统一处理类失效原因
-
【学习笔记】SpringMVC实现文件上传
-
vue3从0到1-超详细
-
EA_20290101_ma_kdj_multicurrencypair_modified20181216.ex4
-
天空盒子(沙漠,大海,纯色)
-
项目管理工具与方法
-
C/C++反汇编解密
-
使用 Linux 平台充当 Router 路由器
-
中央广播电视大学《中级财务会计(一)》期末总复习资料(含答案).pdf
-
中央广播电视大学《中级财务会计(二)》期末总复习资料(含答案).pdf
-
树形结构递归算法实现
-
MySQL NDB Cluster 负载均衡和高可用集群
-
CC2541.docx