子向父方式1:通过props,如例子中子组件test1.vue向父组件App.vue传值

  App.vue代码

<template>
<div id="app">
<test1 :parfn="parfn"></test1>
</div>
</template> <script>
import test1 from '@/components/test1.vue'
export default {
name: 'App',
data () {
return {
msg: 'parent'
}
},
components: {test1},
methods: {
parfn: function (a) {
alert(a)
}
}
}
</script>

  test1.vue代码

<template>
<div>i am test1</div>
</template> <script>
export default {
data () {
return {
msg: 'test1'
}
},
props: {
parfn: {
type: Function
}
},
created: function () {
this.parfn(this.msg)
}
}
</script>

效果图

子向父方式2:通过$parent

  App.vue代码:  

<template>
<div id="app">
<test1></test1>
</div>
</template> <script>
import test1 from '@/components/test1.vue'
export default {
name: 'App',
data () {
return {
msg: 'parent'
}
},
components: {test1},
methods: {
parfn: function (a) {
alert(a)
}
}
}
</script>

  test1.vue代码: 

<template>
<div>i am test1</div>
</template> <script>
export default {
data () {
return {
msg: 'test1'
}
},
created: function () {
this.$parent.parfn(this.msg)
}
}
</script>

效果图:

子向父方式3:通过emit

  App.vue代码

<template>
<div id="app">
<test1 @myfn="parfn"></test1>
</div>
</template> <script>
import test1 from '@/components/test1.vue'
export default {
name: 'App',
data () {
return {
msg: 'parent'
}
},
components: {test1},
methods: {
parfn: function (a) {
alert(a)
}
}
}
</script>

  test1.vue代码: 

<template>
<div>i am test1</div>
</template> <script>
export default {
data () {
return {
msg: 'test1'
}
},
mounted: function () {
this.$emit('myfn', this.msg)
}
}
</script>

效果图:

父向子传值方式1:通过props

  App.vue代码: 

<template>
<div id="app">
<test1 :msg="msg"></test1>
</div>
</template> <script>
import test1 from '@/components/test1.vue'
export default {
name: 'App',
data () {
return {
msg: 'parent'
}
},
components: {test1}
}
</script>

  test1.vue代码:

<template>
<div>i am test1</div>
</template> <script>
export default {
props: ['msg'],
created: function () {
alert(this.msg)
}
}
</script>

  效果图:

  

父向子方式2:通过$children

  App.vue代码:  

<template>
<div id="app">
<test1></test1>
</div>
</template> <script>
import test1 from '@/components/test1.vue'
export default {
name: 'App',
data () {
return {
msg: 'parent'
}
},
mounted: function () {
this.$children[].childfn(this.msg)
},
components: {test1}
}

  test1.vue代码  

<template>
<div>i am test1</div>
</template> <script>
export default {
methods: {
childfn: function (a) {
alert(a)
}
}
}
</script>

  效果图:

  

父向子方式3:通过ref

  App.vue代码: 

<template>
<div id="app">
<test1 ref="mychild"></test1>
</div>
</template> <script>
import test1 from '@/components/test1.vue'
export default {
name: 'App',
data () {
return {
msg: 'parent'
}
},
mounted: function () {
this.$refs.mychild.childfn(this.msg)
},
components: {test1}
}
</script>

  test1.vue代码: 

<template>
<div>i am test1</div>
</template> <script>
export default {
methods: {
childfn: function (a) {
alert(a)
}
}
}
</script>

  效果图:

  

兄弟间传值方式1:通过事件车,例如App.vue组件中两个兄弟组件test1.vue传值给test2.vue

  步骤1:在外部如assets下创建bus.js 

// bus.js
import Vue from 'vue'
export default new Vue()

  步骤2:组件中引入相互传值的兄弟组件,如App.vue中test1组件传值给test2组件 

<!--App.vue-->
<template>
<div id="app">
<test1></test1>
<test2></test2>
</div>
</template> <script>
import test1 from '@/components/test1.vue'
import test2 from '@/components/test2.vue'
export default {
name: 'App',
components: {test1, test2}
}
</script>

  步骤3:test1组件中引入bus,通过$emit发送事件 

<template>
<div>
test1
<button @click="send">点击发送test1数据给test2</button>
</div>
</template> <script>
import bus from '@/assets/bus'
export default {
data () {
return {
msg: 'test1数据111'
}
},
methods: {
send: function () {
bus.$emit('myfn', this.msg)
}
}
}
</script>

  步骤4:test2组件中引入bus,通过$on接收事件

<template>
<div>
i am test2,接收过来的数据为:{{msg}}
</div>
</template> <script>
import bus from '@/assets/bus'
export default {
data () {
return {
msg: ''
}
},
created: function () {
bus.$on('myfn', msg => {
this.msg = msg
})
}
}
</script>

  效果图:

兄弟间传值方式2:子组件传数据给父,父再传给另一个兄弟组件,例如App.vue组件中两个兄弟组件test1.vue传值给test2.vue

  步骤1:test1组件中通过$emit传递数据给父组件App.vue 

<template>
<div>
test1
<button @click="send">点击发送test1数据给test2</button>
</div>
</template> <script>
export default {
data () {
return {
msg: 'test1数据111'
}
},
methods: {
send: function () {
this.$emit('myfn', this.msg)
}
}
}
</script>

  步骤2:父组件App.vue中,通过v-bind绑定个属性传递给另一个子组件test2.vue

<!--App.vue-->
<template>
<div id="app">
<test1 @myfn="getmsg"></test1>
<test2 :msg="msg"></test2>
</div>
</template> <script>
import test1 from '@/components/test1.vue'
import test2 from '@/components/test2.vue'
export default {
name: 'App',
data () {
return {
msg: ''
}
},
methods: {
getmsg: function (msg) {
this.msg = msg
}
},
components: {test1, test2}
}
</script>

  步骤3:test2.vue组件通过props接收父组件传递过来的参数 

<template>
<div>
i am test2,接收过来的数据为:{{msg}}
</div>
</template> <script>
export default {
props: ['msg']
}
</script>

  效果图:

  

总结vue中父向子,子向父以及兄弟之间通信的几种方式的更多相关文章

  1. Vue组件之间通信的三种方式

    最近在看梁颠编著的<Vue.js实战>一书,感觉颇有收获,特此记录一些比价实用的技巧. 组件是MVVM框架的核心设计思想,将各功能点组件化更利于我们在项目中复用,这类似于我们服务端面向对象 ...

  2. vue组件之间通信的8种方式

    对于vue来说,组件之间的消息传递是非常重要的,下面是我对组件之间消息传递的常用方式的总结. props和$emit(常用) $attrs和$listeners 中央事件总线(非父子组件间通信) v- ...

  3. Vue中利用$emit实现子组件向父组件通信

    Vue中利用$emit实现子组件向父组件通信 父组件 <template> <div> <p>我是父组件</p> <child :isShow=& ...

  4. vue组件通信的几种方式

    最近用vue开发项目,记录一下vue组件间通信几种方式 第一种,父子组件通信 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.vue 2.Child ...

  5. vue中echarts 在element-ui的tab 切换时 width 为100px 时的解决方式

    最近在项目中遇到了这种情况,需要在tab控件上渲染多个echart图标,然后切换查看时,发现图表的宽度不正确 原因:在页面进行加载时,隐藏的图表找不到对应的div大小,所以默认给了一个大小.所以要做的 ...

  6. (尚031)Vue_案例_自定义事件(组件间通信第2种方式:vue自定义事件)

    自定义事件: 我们知道,父组件使用prop传递数据的子组件,但子组件怎么跟父组件通信呢? 这个时候Vue的自定义事件系统就派得上用场了. 自定义事件知道两件事: (1).绑定 (2).触发 注意:$o ...

  7. Vue自定义组件以及组件通信的几种方式

    本帖子来源:小贤笔记 功能 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它 ...

  8. [转] React 中组件间通信的几种方式

    在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件之间通信 非嵌套组件间通信 下面依次说下这几种通 ...

  9. React 中组件间通信的几种方式

    在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 非嵌套组件间通信 跨级组件之间通信 1.父组件向子组件通 ...

随机推荐

  1. _spellmod_aura_pct

    属性光环 为玩家增加光环或降低属性 `aura`光环ID `auraType1` 配置属性('空','生命值','全属性','近战攻击强度','远程攻击强度','法术强度','治疗效果','施法速度' ...

  2. [转]osgconv工具简介

    osgconv是一种用来读取3D数据库以及对它们实施一些简单的操作的实用应用程序,同时也被称作 一种专用3D数据库工具. 用osgconv把其他格式的文件转换为OSG所支持的格式 osgconv是一种 ...

  3. acure使用

    打开,选择用IE浏览器,如果选择Chrome浏览器会提示让安装插件

  4. Spring mvc集成log4j2

    前期环境 Spring mvc + Maven + Idea 一.下面开始配置log4j2,先简单演示其如何配置,再仔细了解log4j2用法. 1.1  配置pom.xml,引用log4j2相关包 & ...

  5. prometheus相关文章

    prometheus book https://yunlzheng.gitbook.io/prometheus-book/ 开发自己的分布式监控Prometheus Exporter时遇到的坑 htt ...

  6. Phonics 自然拼读法 g, o, u, l, f, b Teacher:Lamb

    课上内容(Lesson) Part I     Warm-up & Video  Food Fashion Fun  19 sets http://www.unsv.com/material/ ...

  7. Eclipse中设置作者日期等Java注释模板

    Eclipse作为JavaIDE(Integrated Development Environment,集成开发环境),可以通过设置自动添加Javadoc注释信息,如@author 作者名.@vers ...

  8. QT 右键弹出菜单

    QWidget及其子类都可有右键菜单 1.设置标志 在widget初始化的时候 setContextMenuPolicy(Qt::CustomContextMenu); 设置为自定义菜单模式 2.在需 ...

  9. css伪类选择符

    1):link/:visited/:hover/:active (爱恨原则 love/hate)2):first-child/:last-child/:only-child/:nth-child(n) ...

  10. 在OAF页面中集成ECharts以及highcharts用于显示图表

    历史博文中有讲解在请求中输出基础图表的方式,见地址:EBS 请求输出Html报表集成Echarts 本文讲述在OAF中集成这两类图表. 集成的基本思路:在OAF页面中加入一个rawText组件,在ra ...