全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Vue爬坑之vuex初识

在 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&nbsp;&copy;&nbsp;{{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小时内与您取得联系。