vuex主要是是做数据交互,父子组件传值可以很容易办到,但是兄弟组件间传值,需要先将值传给父组件,再传给子组件,异常麻烦。

vuex大概思路:a=new Vue(),发射数据‘msg’:a.$emit('evt','msg'),接收数据msg:a.$on('evt',msg=>this.msg=msg) ,代码在mounted中。

vuex使用:

store端 :

一共有4大块,state,actions,mutations、getters


//一般单独js文件写数据
 
import Vue from 'vue' 
import Vuex from 'vuex'
Vue.use(Vuex)  
export default new Vuex.Store({
state: {                //state数据跟根组件data写法一模一样。也是储存数据的。
  a: 1,
  b: '33'
},
actions: {               //actions里面全是方法,与mutations区别只有这儿的方法可以使用异步操作,mutations方法使用异步,调试会混乱。
  fn({ commit, state }, n) {    //{{commit,state}}写法是es6语法,简写,state是默认传参,就是上面的state,就算写aaa也是指向state。n为组件传过来的参数。         new Promise((resolve, reject) => {        //这儿模拟延迟,不模拟写 state.a += n;commit('add')代替       setTimeout(() => resolve(state.a += n), 1000)     }).then(commit('add'))      //fn执行结束后,再执行mutations 中的add(){}。必须如此,否则,组件使用时收不到数据。   },
  msgFn({ commit, state }, msg) {
    state.b = msg
    commit('add')
  } },
mutations: {              //此处的function是同步操作的。其他的都跟上面一样。
  add(state,n) {}          //参数跟actions一样。
},
getters: {              // 这个跟组件的computed差不多,接收state作为参数,不接受组件传参数。需要return值。   c(state) {
    state.a += 1        
    return state.a--       
  }, }
})
 

组件端使用:

使用的时候后,可以直接挂载后使用,挂载后就变成了自己组件的数据或者方法了。:

挂载点:computed:

    mapState(['a'])                             或者使用:this.$store.state   获取state对象。
    mapGetters([ 'doneTodosCount', 'anotherGetter',])      或者使用:this.$store.getters  获取getters对象。
挂载点:methods:
    mapMutations(['mutationName'])   

    mapActions([ 'actionName',])  

      Mutations使用:

        使用方法1:无需挂载,直接使用,可在自定义methods,watch,等等函数中使用。

             this.$store.commit('mutationName',n)    使用mutiationName函数并传递参数n,传过去自动变为是第二位参数,第一位参数一定是state。

        使用方法2:需挂载

            @click='mutationName(5)', 这个5 传过去会自动变成为给函数第二个参数,第一个参数必须是state。

      Actions使用:

        使用方法一:无需挂载,直接使用。

          this.$store.dispatch('actionA',msg).then(() => {}) 传参上同。这儿可以用then()

        使用方法2:需挂载

          @click='actionA(msg).then(fn)'  使用actionA函数,并且传msg参数过去。参数上同  

<template>
<div id="app">
<button @click='fn(4)'>state.a+4</button> <!--使用vuex传过来的函数fn,并且传参4-->
<div>
现在state.a:{{a}}
<br>
现在getters.c(): {{c}}   注:c=state.a+1
<br>
<hr>
<aaa ></aaa>
<hr>
<bbb></bbb>
</div>
</div>
</template> <script>
import {mapGetters,mapActions,mapMutations,mapState} from 'vuex';    //引入辅助函数,拿去挂载后就可以用了。
const {fn,msgFn}=mapActions(['fn','msgFn'])                  //对象展开运算符...测试无法用,这儿用解构代替。        
const {a,b}=mapState(['a','b'])         //解构目的在于:挂载方式如 methods:MapActions(['xxx']),自己还想在本地写方法,怎么办?
const {c}=mapGetters(['c'])            //于是将外面的花括号去掉,添加到methods:{fn,msgFn,myFn}中,其中myFn为本地添加的。
export default {
computed:{
a,b,c
},
methods:{
fn,
},
components:{
aaa:{              //传递input输入的msg給state.b ,调用vuex里的msgFn,将msg当做参数传过去,msgFn的代码就是将state.b=msg。
template:`<div><h2>我是子组件aaa</h2><p >{{c}}</p><br>state.b=input值 :<input type="text" v-model='msg'></div>`,
computed:mapGetters(['c']),
data(){
return {
msg:''
}
},
methods:{
fn,
msgFn,
     fn1(){
       console.log(222)
     }
}
},
    watch:{
      msg(){  //检测msg的值,发生变化后触发msgFn
      this.$store.dispatch('msgFn',this.msg).then(this.fn1)
      }
    }
    bbb:{            //兄弟组件能够显示state.b的值。
template:`<div><h2>我是子组件的兄弟组件bbb</h2><br>我收到aaa的输入数据,利用state.b显示出来 :</bbbbr><span>{{b}}</span></div>`,
computed:mapState(['b'])
}
}
}

main.js中,需要将vuex.store实例挂载到根组件中。

import Vue from 'vue'
import App from './App.vue'
import store from './store.js' new Vue({
store,
el: '#app',
render: h => h(App)
})

vuex 基本用法、兄弟组件通信,参数传递的更多相关文章

  1. Vue 兄弟组件通信(不使用Vuex)

    Vue 兄弟组件通信(不使用Vuex) 项目中,我们经常会遇到兄弟组件通信的情况.在大型项目中我们可以通过引入vuex轻松管理各组件之间通信问题,但在一些小型的项目中,我们就没有必要去引入vuex.下 ...

  2. vue 组件之间互相传值:兄弟组件通信

    vue 组件之间互相传值:兄弟组件通信我们在项目中经常会遇到兄弟组件通信的情况.在大型项目中我们可以通过引入 vuex 轻松管理各组件之间通信问题,但在一些小型的项目中,我们就没有必要去引入 vuex ...

  3. Vue兄弟组件通信

    Vue兄弟组件通信之借助中央事件总线 下载链接:https://www.yinxiangit.com 其实要实现兄弟组件通信,就算是通过父子组件通信的方式也是可以达到的,如 子 ——>父——&g ...

  4. Vue2不使用Vuex如何实现兄弟组件间的通信

    在一些正规的大型项目的企业级开发过程中我们一般会引入Vuex来对Vue所有组件进行状态管理,可以轻松实现各组件间的通信.但是有时候做做自己的小项目,没有必要使用Vuex时,如何简单的实现组件间的通信? ...

  5. vue2.0s中eventBus实现兄弟组件通信

    在vue1.0中,组件之间的通信主要通过vm.$dispatch沿着父链向上传播和用vm.$broadcast向下广播来实现.然而在vue2.0中,已经废除了这种用法. vuex加入后,对组件之间的通 ...

  6. vue组件通信&&v兄弟组件通信eventbus遇到的问题(多次触发、第一次不触发)

    组件通讯包括:父子组件间的通信和兄弟组件间的通信.在组件化系统构建中,组件间通信必不可少的 (vuex以后再说). 父组件--> 子组件 1. 属性设置 父组件关键代码如下: <templ ...

  7. vue2.0 父子组件通信 兄弟组件通信

    父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></chil ...

  8. vue组件之间的通信, 父子组件通信,兄弟组件通信

    组件通讯包括:父子组件间的通信和兄弟组件间的通信.在组件化系统构建中,组件间通信必不可少的. 父组件--> 子组件 1. 属性设置 父组件关键代码如下: <template> < ...

  9. 关于Vue 兄弟组件通信

    最近项目中遇到希望在操作路由组件里面内容的时候可以影响共用组件Header组件(这个其实就是他的兄弟组件)的操作.  意思就是 router-view指向的router来影响Header组件的信息 首 ...

随机推荐

  1. Eclipse Maven Mybatis的使用

    关于maven的使用网上有太多教程,这里就不再介绍.本篇文章只用来记录 在Eclipse中使用maven创建含有mybatis的程序的配置,及注意事项. 使用Eclipse创建Maven项目 创建后的 ...

  2. C++ list forward_list

    list,forward_list list:双向链表 forward_list:单向链表 在任何位置添加元素,删除元素都很快,但随机访问元素则很慢 声明和初始化 list<T> l; l ...

  3. jquery on()动态绑定元素的的点击事件无反应的问题记录

    1.jquery使用版本:v2.0 2.重现代码: html <table class="table"> <thead> <tr> <th ...

  4. linux进程标识符具体解释1

    每一个进程都有一个实际用户标识符和一个实际组标识符,它们永远是启动该进程之用户的用户标识符和组标识符. 进程的有效用户标识符和有效组标识符或许更重要些,它们被用来确定一个用户是否能訪问某个确定的文件. ...

  5. 两小时搞定C#版超级战舰游戏

    课程简单介绍 游戏开发已然是眼下火星上都非常火的开发技术.而休闲的小游戏超级战舰也是眼下白领中最流行的小游戏.那超级战舰游戏是如何在两个小时高速搞定的呢?休闲类的小游戏高速开发的指南是什么?C#是如何 ...

  6. android项目 之 记事本(11) ----- 加入数据库

    本文是自己学习所做笔记.欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 通过之前的10节,已实现了记事本的大部分功能,有加入拍照.加入照片,加入录音,加 ...

  7. Linux CentOS完全卸载PHP

    很无语,CentOS居然php版本才5.1.6,很多开源的CMS无法安装. 查看php版本命令: #php -v 下面的命令是删除不干净的 #yum remove php 因为使用这个命令以后再用 # ...

  8. java类的继承的一些细节

    类的继承是java面向对象体系的一个重要方面(封装.继承.多态),对于java类的继承,需要注意如下细节. 1.构造函数. 如果一个类没有任何构造函数,系统会默认分配一个无参的构造函数给它,这个构造函 ...

  9. Intellij 解除(去除)SVN关联

    方法一:通过Intellj 来处理 1. 安装插件 打开Intellij的setting(ctrl+alt+s),选择plugins,在右边搜索框输入"SVN",搜索.选择&quo ...

  10. WCF系统内置绑定列表与系统绑定所支持的功能

      WCF系统内置绑定列表 绑定 配置元素 说明 传输协议 编码格式 BasicHttpBinding <basicHttpBnding> 一个绑定,适用于与符合 WS-Basic Pro ...