在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用 props 或者 $emit 等方式.

但是如果是大型项目,很多时候都需要在子组件之间传递数据,使用之前的方式就不太方便。Vue 的状态管理工具 Vuex 完美的解决了这个问题。
一、安装并引入 Vuex
项目结构:
首先使用 npm 安装 Vuex
cnpm install vuex -S
然后在 main.js 中引入
import Vue from 'vue'
import App from './App'
import Vuex from 'vuex'
import store from './vuex/store'
Vue.use(Vuex)
/* eslint-disable no-new */
new Vue({
el: '#app',
store,
render: h => h(App)
})
二、构建核心仓库 store.js
Vuex 应用的状态 state 都应当存放在 store.js 里面,Vue 组件可以从 store.js 里面获取状态,可以把 store 通俗的理解为一个全局变量的仓库。
但是和单纯的全局变量又有一些区别,主要体现在当 store 中的状态发生改变时,相应的 vue 组件也会得到高效更新。
在 src 目录下创建一个 vuex 目录,将 store.js 放到 vuex 目录下
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
// 定义状态
state: {
author: 'Wise Wrong'
}
})
export default store
这是一个最简单的 store.js,里面只存放一个状态 author
虽然在 main.js 中已经引入了 Vue 和 Vuex,但是这里还得再引入一次
三、将状态映射到组件
<template>
<footer class="footer">
<ul>
<li v-for="lis in ul">{{lis.li}}</li>
</ul>
<p>
Copyright © {{author}} - 2016 All rights reserved
</p>
</footer>
</template>
<script>
export default {
name: 'footerDiv',
data () {
return {
ul: [
{ li: '琉璃之金' },
{ li: '朦胧之森' },
{ li: '缥缈之滔' },
{ li: '逍遥之火' },
{ li: '璀璨之沙' }
]
}
},
computed: {
author () {
return this.$store.state.author
}
}
}
</script>
这是 footer.vue 的 html 和 script 部分
主要在 computed 中,将 this.$store.state.author 的值返回给 html 中的 author
页面渲染之后,就能获取到 author 的值
四、在组件中修改状态
然后在 header.vue 中添加一个输入框,将输入框的值传给 store.js 中的 author
这里我使用了 Element-UI 作为样式框架
上面将输入框 input 的值绑定为 inputTxt,然后在后面的按钮 button 上绑定 click 事件,触发 setAuthor 方法
methods: {
setAuthor: function () {
this.$store.state.author = this.inpuTxt
}
}
在 setAuthor 方法中,将输入框的值 inputTxt 赋给 Vuex 中的状态 author,从而实现子组件之间的数据传递
五、官方推荐的修改状态的方式
上面的示例是在 setAuthor 直接使用赋值的方式修改状态 author,但是 vue 官方推荐使用下面的方法:
首先在 store.js 中定义一个方法 newAuthor,其中第一个参数 state 就是 $store.state,第二个参数 msg 需要另外传入
然后修改 header.vue 中的 setAuthor 方法
这里使用 $store.commit 提交 newAuthor,并将 this.inputTxt 传给 msg,从而修改 author
这样显式地提交(commit) mutations,可以让我们更好的跟踪每一个状态的变化,所以在大型项目中,更推荐使用第二种方法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Vue
# vuex
# Vue.js实战之Vuex的入门教程
# 基于vue2.0+vuex的日期选择组件功能实现
# Vuex之理解Store的用法
# 如何快速上手Vuex
# Vuex之理解state的用法实例
# 详解Vue中状态管理Vuex
# Vue 2.X的状态管理vuex记录详解
# 输入框
# 推荐使用
# 这是
# 全局变量
# 是在
# 放在
# 也会
# 目录下
# 第一个
# 就能
# 让我们
# 不太
# 又有
# 这个问题
# 这是一个
# 第二个
# 并将
# 还得
# 可以使用
# 种方法
相关文章:
如何快速搭建自助建站会员专属系统?
如何用景安虚拟主机手机版绑定域名建站?
如何破解联通资金短缺导致的基站建设难题?
网站制作价目表怎么做,珍爱网婚介费用多少?
网站制作说明怎么写,简述网页设计的流程并说明原因?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
临沂网站制作企业,临沂第三中学官方网站?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
制作网站的软件免费下载,免费制作app哪个平台好?
如何快速辨别茅台真假?关键步骤解析
如何在阿里云通过域名搭建网站?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
C++如何编写函数模板?(泛型编程入门)
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
大型企业网站制作流程,做网站需要注册公司吗?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
如何在Windows虚拟主机上快速搭建网站?
建站之星后台管理:高效配置与模板优化提升用户体验
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何制作一个表白网站视频,关于勇敢表白的小标题?
制作网站公司那家好,网络公司是做什么的?
建站主机CVM配置优化、SEO策略与性能提升指南
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何选择适合PHP云建站的开源框架?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
制作企业网站建设方案,怎样建设一个公司网站?
如何在香港服务器上快速搭建免备案网站?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
北京网站制作的公司有哪些,北京白云观官方网站?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
建站三合一如何选?哪家性价比更高?
如何通过万网虚拟主机快速搭建网站?
c# 服务器GC和工作站GC的区别和设置
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何做网站制作流程,*游戏网站怎么搭建?
如何在阿里云部署织梦网站?
建站之星收费标准详解:套餐费用及年费价格表一览
建站之星安装失败:服务器环境不兼容?
如何设置并定期更换建站之星安全管理员密码?
电商网站制作公司有哪些,1688网是什么意思?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何通过远程VPS快速搭建个人网站?
如何在Ubuntu系统下快速搭建WordPress个人网站?
如何快速搭建高效WAP手机网站吸引移动用户?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
C++时间戳转换成日期时间的步骤和示例代码
如何用VPS主机快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。