Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)


Posted in Javascript onSeptember 15, 2017

在这之前,我已经分享过组件与组件的通信机制以及父子组件之间的通信机制,而我们的vuex就是为了解决组件通信问题的

vuex是什么东东呢?

组件通信的本质其实就是在组件之间传递数据或组件的状态(这里将数据和状态统称为状态),但可以看到如果我们通过最基本的方式来进行通信,一旦需要管理的状态多了,代码就会变得十分臃肿和庞大。对所有状态的管理便会显得力不从心,因此,vuex出现了,他就是帮助我们把公用的状态全抽出来放在vuex的容器中,然后根据一定的规则来进行管理,我们赶紧来用一下吧,想要掌握vuex的用法,你应该要掌握组件之间的通信,如果不了解,请参考以下这两篇文章:

搭建环境开始:

在git命令行下,执行以下命令完成环境的搭建:

1,npm install --global vue-cli  安装vue命令行工具

2,vue init webpack vue-demo   使用vue命令生成一个webpack项目,项目名称为vue-demo

3,cd vue-demo 切入项目

4,npm install安装package.json中的所有依赖包

5,npm run dev运行项目

然后删除默认的Hello.vue组件,把App.vue整理成以下样子

<template>
 <div id="app">
 这是一个空的app
 </div>
</template>

<script>
 export default {
  name : 'app'
 }
</script>

 把router下面index.js文件修改如下:

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

export default new Router({
 routes: [
  {
   path: '/',
  }
 ]
})

基本环境搭建完毕之后,开始安装vuex了

安装命令:npm install vuex --save-dev

一、安装完成之后,在main.js中引入,并注册store:这样我们就能通过this.$store来获得这个容器了

main.js代码:

import Vue from 'vue'
import App from './App'
import router from './router'
import Vuex from 'vuex'
import store from './vuex/store'

Vue.use(Vuex)

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
 el: '#app',
 router,
 store,
 template: '<App/>',
 components: { App }
})

二、在src目录下创建vuex目录,然后在vuex目录下创建store.js,用于存放所有的状态(改变的数据)

store.js代码:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
 state: {
  userName : 'ghostwu'
 }
})

export default store

在state存储了一个状态userName

三、将状态中的数据渲染到组件中

在components下面新建一个组件Main.vue,代码如下:

<template>
  <div>
    <h3>{{myName}}</h3>
  </div>
</template>
<script>
  export default {
    name : "Main",
    computed : {
      myName (){
        return this.$store.state.userName;
      }
    }
  }
</script>

通过一个计算属性获取到存储在全局容器store中state保存的状态值

四,在App.vue中引入组件Main.vue

App.vue代码:

<template>
 <div id="app">
  <Mainc></Mainc>
 </div>
</template>

<script>
import Mainc from './components/Main.vue';
export default {
 name: 'app',
 components : {
  Mainc
 }
}
</script>

这个时候,就能看见在页面上把store容器中 state的userName的值读取出来了, 如果修改userName的值,页面上也会发生变化

五、,我们通过一些交互来改变状态,看下组件是否能收到state的值

在components组件下新建一个Header.vue组件,代码如下:

<template>
  <div>
    <input type="text" v-model="msg" />
    <input type="button" v-on:click="setName" value="点我" />
  </div>
</template>
<script>
  export default {
    name : 'Header',
    data(){
      return {
        msg : ''
      }
    },
    methods : {
      setName(){
        this.$store.state.userName = this.msg;
      }
    }
  }
</script>

App.vue引入组件Header

App.vue代码如下:

<template>
 <div id="app">
  <Headerc></Headerc>
  <Mainc></Mainc>
 </div>
</template>

<script>
import Headerc from './components/Header.vue';
import Mainc from './components/Main.vue';
export default {
 name: 'app',
 components : {
  Headerc,
  Mainc
 }
}
</script>

当我点击按钮的时候,改变state中useName的值,Main组件中的state.userName的值也会跟着更新,这种改变方式很好理解,接下来我们看下vuex推荐的状态改变方式

六、vuex推荐的状态改变方法

在store.js中新建一个mutations,存放被修改的状态

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
 state: {
  userName : 'ghostwu'
 },
 mutations : {
  showUserName( state, msg ){
   state.userName = msg;
  }
 }
})

export default store

其中第一个参数 state 就是 $store.state,第二个参数 msg 需要另外传入,这个参数我们通过Header.vue的点击事件中的方法来传递

Header.vue代码:

<template>
  <div>
    <input type="text" v-model="msg" />
    <input type="button" v-on:click="setName" value="点我" />
  </div>
</template>
<script>
  export default {
    name : 'Header',
    data(){
      return {
        msg : ''
      }
    },
    methods : {
      setName(){
        this.$store.commit( 'showUserName', this.msg );
      }
    }
  }
</script>

$store.commit 把this.msg的值提交给showUserName。state就收到了改变的状态了,这就是一个vuex最基本的用法和作用

以上这篇Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js捕获鼠标滚轮事件代码
Dec 16 Javascript
js表头排序实现方法
Jan 16 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
Dec 17 Javascript
微信小程序 实战程序简易新闻的制作
Jan 09 Javascript
React-Native做一个文本输入框组件的实现代码
Aug 10 Javascript
javascript 中模板方法单例的实现方法
Oct 17 Javascript
基于Vue的移动端图片裁剪组件功能
Nov 28 Javascript
node.js中axios使用心得总结
Nov 29 Javascript
Vue 中使用 CSS Modules优雅方法
Apr 09 Javascript
详解vuex状态管理模式
Nov 01 Javascript
vue配置多代理服务接口地址操作
Sep 08 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
Oct 27 Javascript
angular4模块中给标签添加背景图的实现方法
Sep 15 #Javascript
基于Vue生产环境部署详解
Sep 15 #Javascript
基于Vue单文件组件详解
Sep 15 #Javascript
json2.js 入门教程之使用方法与实例分析
Sep 14 #Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
Sep 14 #Javascript
iframe与主框架跨域相互访问实现方法
Sep 14 #Javascript
VsCode插件整理(小结)
Sep 14 #Javascript
You might like
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
GD输出汉字的函数的分析
2006/10/09 PHP
php array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
js 火狐下取本地路径实现思路
2013/04/02 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python实现图像几何变换
2015/07/06 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
python操作链表的示例代码
2020/09/27 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
自我鉴定 电子商务专业
2014/01/30 职场文书
高中军训感想800字
2014/02/23 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
工作年限证明模板
2015/06/15 职场文书
详解jQuery的核心函数和事件处理
2022/02/18 jQuery