美文网首页
vue中的组件间通信

vue中的组件间通信

作者: yangrenmu | 来源:发表于2017-11-07 18:53 被阅读0次

vue中组件通信方法有很多种,可以根据具体场景来选择具体使用哪种。比较常见的以下几种方法:

1、父组件向子组件传参

在父组件中向子组件传入普通字符串:

<Child message="hello vue"></Child>

在子组件中用props接受传进来的参数:

props: {
  message: ''
}

完整代码:

// 父组件
<template>
  <div id="example">
    <Child message="hello vue"></Child>
  </div>
</template>
<script type="text/javascript">
import Child from './Child';

export default {
  components: {
    Child
  }
}
</script>
// 子组件
<template>
  <div id="child">
    <span>{{ message }}</span>
  </div>
</template>
<script type="text/javascript">
export default {
  props: {
    message: ''
  }
}
</script>

2、子组件向父组件传参

props传递参数时是单向的,这意味着我们不能通过props向父组件传递参数。我们可以在子组件中发送事件,在父组件中监听事件来实现子组件向父组件传参。
子组件使用emit发送事件:

this.$emit('listenFromChildData', 'this message is from child')

父组件监听事件:

<Child @listenFromChildData="childData"></Child>

完整代码:

// 父组件
<template>
  <div id="example">
    <span>{{text}}</span>
    <Child @listenFromChildData="childData"></Child>
  </div>
</template>
<script type="text/javascript">
import Child from './Child';

export default {
  data: function() {
    return {
      text: ''
    }
  },
  methods: {
    childData(data) {
      this.text = data
    }
  },
  components: {
    Child
  }
}
</script>
// 子组件
<template>
  <div>
    <button @click="sendMsgToParent">向父组件传值</button>
  </div>
</template>
<script type="text/javascript">
export default {
  methods: {
    sendMsgToParent() {
      // 发送数据
      this.$emit('listenFromChildData', 'this message is from child')
    }
  }
}
</script>

3、非父子组件通信

非父子组件之间通信时,简单的情况下,可以使用事件总线。
首先定义一个空的Vue实例作为事件总线:

let bus = new Vue()

在A组件中使用emit发送事件:

bus.$emit('event', data)

在B组件中使用on监听事件:

bus.$on('event', function (data) {
    // todo ...
})

完整代码:

// 组件A
<template>
  <div>
    <span>组件A</span>
    <button v-on:click="add"> {{text}} </button>
  </div>
</template>
<script type="text/javascript">
import bus from '../bus.js'
export default {
  data: function() {
    return {
      text: '发送数据',
      data: ''
    }
  },
  methods: {
    add() {
        bus.$emit('sendDataToB', 'this data from A')
    }
  }
}
</script>
// 组件B
<template>
  <div>
    <span>组件B</span>
    <span>{{data}}</span>
  </div>
</template>
<script type="text/javascript">
import bus from '../bus.js'
export default {
  data: function() {
    return {
      data: ''
    }
  },
  mounted() {
    var self = this
    bus.$on('sendDataToB', function (msg) {
      self.data = msg
    })
  }
}
</script>

4、vuex

在复杂情况下,组件间通信可以使用vuex,vuex的官方文档

相关文章

  • vue组件间通信的一些实用方法(VUE2.x)

    vue组件间通信的一些实用方法(VUE2.x) 一、父子组件间通信 常用的父子组件通信方法,一般涉及props和$...

  • vue文档集合

    Vue2使用笔记3--父子组件的通信Vue 2.0开发实践(组件间通讯)Event Bus 在Vue中的使用vue...

  • vue 组件通信方式 ,父子、隔代、兄弟 三类通信,六种方法

    Vue 组件间通信只要指以下 3 类通信:父子组件通信、隔代组件通信、兄弟组件通信,下面分别介绍每种通信方式且会说...

  • vue.js系列三:组件间通信

    1.组件间通信基本原则 2.vue 组件间通信方式 2.1组件间通信 1: props(适用于父子组件传递属性) ...

  • vue组件间通信

    vue组件间通信 1.父组件向子组件传递数据--props 在vue2.0中使用props实现向子组件传递数据: ...

  • Vue之间的通信方式

    Vue组件间通信方式 快速原型开发 可以快速识别.vue文件封装组件插件等功能 一.Props传递数据 在父组件中...

  • vue中的组件间通信

    vue中组件通信方法有很多种,可以根据具体场景来选择具体使用哪种。比较常见的以下几种方法: 1、父组件向子组件传参...

  • vue中的组件间通信

    父子组件相互通信 非父子组件间通信 关于vuex请查阅: https://www.jianshu.com/writ...

  • Vue组件间通信方式都有哪些?

    一、组件间通信的概念 开始之前,我们把组件间通信这个词进行拆分 组件 通信 都知道组件是vue最强大的功能之一,v...

  • vue的组件通讯

    一、组件间通信的概念 开始之前,我们把组件间通信这个词进行拆分 组件 通信 都知道组件是vue最强大的功能之一,v...

网友评论

      本文标题:vue中的组件间通信

      本文链接:https://www.haomeiwen.com/subject/nkttmxtx.html