Vue之父子兄弟组件间通信


声明:本文转载自https://my.oschina.net/u/3328758/blog/1573927,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

##Vue之父子兄弟组件间通信 @(JavaScript)[学习笔记]


[TOC]


导言

最近在写个人简历网页版遇到一个问题,想要将一个组件的dom结构传递给其他兄弟组件,然后进行dom操作,不知怎么在其间传递数据,查阅资料,找到解决方法,现记录如下,整理思路加强学习,同时便于他人参考 创建一个App.vue作为父组件

<template>   <div class="app">     <childA></childA>     <childB></childB>   </div> </template>  <script type="text/ecmascript-6">   import childA from './components/A.vue'   import childB from './components/B.vue'      export default {     components: {       childA,       childB     }   } </script>  <style lang="stylus" rel="stylesheet/stylus"> </style>  

创建字组件A

<template>   <div class="child-a"></div> </template>  <script type="text/ecmascript-6">   export default {} </script>  <style lang="stylus" rel="stylesheet/stylus"> </style>  

创建子组件B

<template>   <div class="child-b"></div> </template>  <script type="text/ecmascript-6">   export default {} </script>  <style lang="stylus" rel="stylesheet/stylus"> </style>  

1. 父组件向子组件传递消息

父组件向子组件传数据较为简单,子组件用props接收 父组件App

<template>   <div class="app">     <childA :msgApp="msgApp"></childA>     <childB></childB>   </div> </template>  <script type="text/ecmascript-6">   import childA from './components/A.vue'   import childB from './components/B.vue'    export default {     data () {       return {         msgApp: '我是来子父组件的消息'       }     },     components: {       childA,       childB     }   } </script>  <style lang="stylus" rel="stylesheet/stylus"> </style> 

子组件A

<template>   <div class="child-a">我是组件A,接收到消息:{{msgApp}}</div> </template>  <script type="text/ecmascript-6">   export default {     props: {       msgApp: {         type: String       }     }   } </script>  <style lang="stylus" rel="stylesheet/stylus"> </style>  

运行结果如图 enter image description here

2. 子组件向父组件传递数据

子组件向父组件传递数据用this,$emit() 子组件B

<template>   <div class="child-b"></div> </template>  <script type="text/ecmascript-6">   export default {     data () {       return {         msgB: '我是来子B组件的消息'       }     },     mounted () {             // 这里我选择加载完成就传递数据,也可以定义事件等       this.$emit('msg', this.msgB)       console.log(this.msgB)     }   } </script>  <style lang="stylus" rel="stylesheet/stylus"> </style> 

父组件App

<template>   <div class="app">     <childA :msgApp="msgApp"></childA>     <childB v-on:msg="show"></childB     我是父组件,接受到消息:{{msgB}}   </div> </template>  <script type="text/ecmascript-6">   import childA from './components/A.vue'   import childB from './components/B.vue'    export default {     data () {       return {         msgApp: '我是来子父组件的消息',         msgB: ''       }     },     methods: {       show (a) {         this.msgB = a       }     },      components: {       childA,       childB     }   } </script>  <style lang="stylus" rel="stylesheet/stylus"> </style> 

结果如下 enter image description here 还有另一种方法与兄弟组件通信方式相同用eventBus

3. 兄弟组件间通信

兄弟组件通信用eventBus来实现 新建一个js文件,来创建出我们的eventBus,把它命名为bus.js 在组件A和组件B导入就可以使用了 bus.js

import Vue from 'vue' export default new Vue() 

A组件

<template>   <div class="child-a">我是组件A,接收到B消息:{{msgFromB}}</div> </template>  <script type="text/ecmascript-6">   import bus from '../bus'   export default {     data () {       return {         msgFromB: ''       }     },     mounted () {       bus.$on('msg', (a) => {         this.msgFromB = a       })     }   } </script>  <style lang="stylus" rel="stylesheet/stylus"> </style> 

B组件

<template>   <div class="child-b">   </div> </template>  <script type="text/ecmascript-6">   import bus from '../bus'   export default {     data () {       return {         msgB: '我是来子B组件的消息'       }     },     mounted () {       bus.$emit('msg', this.msgB)     }   } </script>  <style lang="stylus" rel="stylesheet/stylus"> </style> 

结果如图 enter image description here

子组件向父组件传递数据也可以使用这种方法,仿兄弟组件通信即可

参考文章

vue.js之路(4)——vue2.0s中eventBus实现兄弟组件通信

本文发表于2017年11月15日 18:34
(c)注:本文转载自https://my.oschina.net/u/3328758/blog/1573927,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2078 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1