子向父方式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. 关于Struts2自动装配和访问Servlet API

    自动装配 1.根据属性的getter和setter获取值  index.jsp <s:form action="hello" method="POST"& ...

  2. selenium-xpath练习

  3. Docker Swarm集群中部署Traefik负载均衡器

    一.创建单节点的Docker Swarm集群 docker swarm init 二.在Swarm集群中创建一个网络 docker network create --driver=overlay tr ...

  4. vue中前端处理token过期的方法与axios请求拦截处理

    在处理token过期的这个问题上困扰了我很久,现在终于解决的了,所以分享出来给大家,希望能够对大家有所帮助. 首先,当然是路由进行拦截,路由拦截当然是在beforeEach中了: router.bef ...

  5. Redis(四)-持久化

    1.Redis将所有数据存储在内存中,从内存同步到磁盘上,就做持久化过程. 2.持久化有两种方式:rdb(Redis Database)和aof(Append of file) # rdb持久化方法: ...

  6. 2 - Binary Search & LogN Algorithm - Apr 18

    38. Search a 2D Matrix II https://www.lintcode.com/problem/search-a-2d-matrix-ii/description?_from=l ...

  7. [Maven - Java Version] 如何设置Maven的Java版本或者使用不同的JDK版本编译

    In pom.xml, defined this maven.compiler.source properties to tell Maven to use Java 8 to compile the ...

  8. [数据结构] 2.2 Huffman树

    注:本文原创,转载请注明出处,本人保留对未注明出处行为的责任追究. 1.Huffman树是什么 Huffman树也称为哈夫曼编码,是一种编码方式,常用于协议的制定,以节省传输空间. A - F字母,出 ...

  9. hyperledger fabric相关记录

    打开对接监控软件(statsd或者prometheus)开关 每个peer上 CORE_OPERATIONS_LISTENADDRESS=peer0.orgxxxxxxxxx:9443 CORE_ME ...

  10. <!--#include virtual='head.html'-->代码复用

    js限制input框只能输入数字:<input type="text" onkeyup="value=value.replace(/[^\d]/g,'')" ...