1.兄弟组件通信:

创建新的vue实例bus.js

//bus.js

import Vue from 'vue'
export default new Vue

组件A:

import Bus from 'bus.js'
Bus.$emit('name', something) //name按照我自己的理解就是一个连接的作用 连接着$on 两者要保持一致(如果理解有误一定请指正)something就是你要传递的参数

组件B:

import Bus from 'bus.js'
Bus.$on('name', something) //something是接收的参数 可以赋值到你想要的地方

2.父子组件通信:

   2.1 父-->子

父组件中通过router-view渲染子组件,或者在父组件中引用子组件都行,我的例子是通过router-view渲染的,父组件:

<router-view ref="event" :form-data="msg"></router-view> //router-view上绑定form-data 注意这里使用-代替驼峰写法 msg是传递的数据
// js
export default {
  data () {
    msg: 'i am a message'
  }
}

这里就是一个传递的过程,将需要传递的数据绑定在子组件上

子组件:

// js

export default{
  props:['formData'], //这里通过 props接收传递过来的数据 这样就完成了父组件到子组件的数据传递
  mounted () {
    console.log(this.formData)
  }
}

3.父组件触发子组件的自定义事件

在2.1的router-view中有这么个属性ref=“event”,我们可以在父组件中通过$refs来调用子组件中的方法写法如下:

export default {
  methods: {
    click () {
        this.$refs.event.getSomething()
    }
  }
}

getSomthing就是子组件中的方法,这里需要注意的是,如果你的子组件循环出来的,调用的使用要用index获取对应的值,例如:this.$refs.event[index].getSomething()

4.子组件触发父组件状态改变

场景描述:A组件(父)中点击按钮改变serverStatus的状态控制提示框(子组件B)显示,在B组件中点击关闭按钮触发父组件中serverStatus的值关闭提示框

// A组件
<div class="mask" v-show="serverStatus">
    <server @close="serverStatus = false"></server>
</div>
// B组件
<span class="x" @click="close"></span>

export default {
  methods: {
    close () {
      this.$emit('close', false)
    }
  }
}
在B组件中定义点击事件close并通过$emit触发,在A组件中监听close事件后改变serverStatus的值,需要注意的是A组件中的监听 必须要绑定在子组件上才能成功监听


未完待续,本文若有错误的地方还请大家指正

欢迎转载,但请注明出处





Logo

前往低代码交流专区

更多推荐