在 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记录详解
# 输入框
# 推荐使用
# 这是
# 全局变量
# 是在
# 放在
# 也会
# 目录下
# 第一个
# 就能
# 让我们
# 不太
# 又有
# 这个问题
# 这是一个
# 第二个
# 并将
# 还得
# 可以使用
# 种方法
相关文章:
如何在IIS服务器上快速部署高效网站?
上海网站制作开发公司,上海买房比较好的网站有哪些?
SQL查询语句优化的实用方法总结
建站之星后台密码遗忘或太弱?如何重置与强化?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
Java解压缩zip - 解压缩多个文件或文件夹实例
宝塔Windows建站如何避免显示默认IIS页面?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
网站app免费制作软件,能免费看各大网站视频的手机app?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
韩国服务器如何优化跨境访问实现高效连接?
建站之星安装后如何配置SEO及设计样式?
如何选择美橙互联多站合一建站方案?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
网站图片在线制作软件,怎么在图片上做链接?
家具网站制作软件,家具厂怎么跑业务?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
网站制作网站,深圳做网站哪家比较好?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何用VPS主机快速搭建个人网站?
定制建站策划方案_专业建站与网站建设方案一站式指南
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何选择高效可靠的多用户建站源码资源?
广平建站公司哪家专业可靠?如何选择?
如何在建站之星绑定自定义域名?
如何用AWS免费套餐快速搭建高效网站?
建站之星安装后界面空白如何解决?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
python的本地网站制作,如何创建本地站点?
如何自定义建站之星模板颜色并下载新样式?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
建站三合一如何选?哪家性价比更高?
如何通过免费商城建站系统源码自定义网站主题与功能?
Python如何创建带属性的XML节点
如何在Windows 2008云服务器安全搭建网站?
威客平台建站流程解析:高效搭建教程与设计优化方案
广州商城建站系统开发成本与周期如何控制?
Python lxml的etree和ElementTree有什么区别
寿县云建站:智能SEO优化与多行业模板快速上线指南
建站168自助建站系统:快速模板定制与SEO优化指南
,sp开头的版面叫什么?
c# 在高并发场景下,委托和接口调用的性能对比
如何在IIS7上新建站点并设置安全权限?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
导航网站建站方案与优化指南:一站式高效搭建技巧解析
*请认真填写需求信息,我们会在24小时内与您取得联系。