组件与组件的关系,通常有父子关系,兄弟关系以及隔代关系。

  针对不同的场景,如何选用适合的通信方式呢?

(一) props/$emit

   parentComponent ==> childComponent

          child 通过 props [childParams] 接受父组件 parent 传递的过来的参数A;

      parent  通过 v-bind:childParams = parentParams 这种方式传递给 child。

   childComponent ==> parentComponent

      child    使用  this.$emit(eventChild,参数) 触发事件

          parent  通过 v-on:eventChild = methodParent  监听事件,获取参数。

    代码如下:

     parentComponent:

<template>
<div>
<child v-bind:childAnimals="parentAnimals" v-on:titleChanged="updateChange"></child>
<h2 v-text="title"></h2>
</div>
</template>
<script>
import Child from './child'
export default {
data() {
return {
title:'未改变时候的值',
parentAnimals: ['dog','cat','pink']
}
},
components: {
'child':Child
},
methods: {
updateChange(e) {
const { name } = e;
this.title = name;
}
}
}
</script>

      childComponent

<template>
<div>
<!--父组件传递过来的参数-->
<ul>
<li v-for="animal in childAnimals" v-bind:key="animal" v-text="animal"></li>
</ul> <!--向父组件传递参数-->
<button @click="changeParentTitle">改变父组件title</button>
</div>
</template>
<script>
export default {
data() {
return { }
},
// props:{
// animals:{
// type:Array,
// required:true
// }
// }
props:['childAnimals'],
methods: {
changeParentTitle() {
this.$emit('titleChanged',{
name: '子组件改变了父亲的title'
});
}
}
}
</script>

(二) $emit /  $on

   通过一个全新 Vue 实例,作为中央事件处理中心,触发事件,监听事件。

   使用方法:

    触发事件: eventInstance.$emit(事件名A, params)
    监听事件: eventInstance.$on(事件名A,(params)=> { } )

    eventService.js

import Vue from 'vue';
export let eventInstance = new Vue();

  child.vue

<template>
<div>
<button @click="send">child发送消息</button>
</div>
</template>
<script>
import { eventInstance } from '../commonEvent/eventService';
export default {
data() {
return {}
},
methods: {
send() {
eventInstance.$emit('msg-child',`this from child ${new Date().toLocaleString()}`);
}
}
}
</script>

   dog.vue 组件接受 child.vue 发送过来的信息

<script>
import { eventInstance } from '../commonEvent/eventService';
export default {
data() {
return {}
},
components: { },
mounted() {
eventInstance.$on('msg-child',(res)=>{
console.log(res);
});
}
}
</script>

    

     

Vue组件通信方式(一)的更多相关文章

  1. 整理4种Vue组件通信方式

    整理4种Vue组件通信方式 重点是梳理了前两个,父子组件通信和eventBus通信,我觉得Vue文档里的说明还是有一些简易,我自己第一遍是没看明白. 父子组件的通信 非父子组件的eventBus通信 ...

  2. Vue组件通信方式全面详解

    vue组件通信方式全面详解 众所周知,Vue主要思想就是组件化开发.因为,在实际的项目开发中,肯定会以组件的开发模式进行.形如页面和页面之间需要通信一样,Vue 组件和组件之间肯定也需要互通有无.共享 ...

  3. 最全的Vue组件通信方式总结

    1.一图认清组件关系名词 父子关系:A与B.A与C.B与D.C与E 兄弟关系:B与C 隔代关系:A与D.A与E 非直系亲属:D与E 总结为三大类: 父子组件之间通信 兄弟组件之间通信 跨级通信 2.8 ...

  4. Vue组件通信方式(8种)

    1.一图认清组件关系名词 父子关系:A与B.A与C.B与D.C与E 兄弟关系:B与C 隔代关系:A与D.A与E 非直系亲属:D与E 总结为三大类: 父子组件之间通信 兄弟组件之间通信 跨级通信 2.8 ...

  5. vue组件通信方式总结

    对于vue来说,组件之间的消息传递是非常重要的,下面是我对组件之间消息传递的各种方式的总结,总共有8种方式. 1. props和$emit 父组件向子组件传递数据是通过prop传递的,子组件传递数据给 ...

  6. vue组件通信方式(多种方案)

    一.Props传递数据 components |-Grandson1.vue //孙子1 |-Grandson2.vue //孙子2 |-Parent.vue //父亲 |-Grandson1.vue ...

  7. Vue组件间通信6种方式

    摘要: 总有一款合适的通信方式. 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的 ...

  8. Vue组件间通信方式

    一.Props传递数据 在父组件中使用子组件,本质通过v-bind绑定属性传入子组件,子组件通过props接收父组件传入的属性 <template> <div> 父组件:{{m ...

  9. vue中8种组件通信方式, 值得收藏!

    vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 首先我们需要知道在vue中组件之间存在什么样的关系, 才更容易理解他们的通信方式, 就 ...

随机推荐

  1. 如何保证Redis与数据库的数据一致性

    一般来说,只要你用到了缓存,不管是Redis还是memcache,就可能会涉及到数据库缓存与数据的一致性问题,这里我们以Redis为例. 我们该如何保证Redis与数据库的一致性呢? So easy: ...

  2. pyqt5-QAbstractScrollArea滚动条

    继承  QObject-->QWidget-->QFrame-->QAbstractScrollArea 是抽象类 import sys from PyQt5.QtWidgets i ...

  3. Python---进阶---函数式编程---lambda

    一. 利用map()函数,把用户输入的不规范的英文,变成首字母大写,其他小写的规范的名字:比如说["ADMAm", "LISA", "JACK&quo ...

  4. sqlserver数据库脱机和分离的区别

    脱机和分离的区别: 分离和脱机都可以使数据库不能再被使用,但是分离后需要附加才能使用,而脱机后只需联机就可以用了. 附加数据库报错: 无法打开物理文件 XXX.mdf".操作系统错误 5:& ...

  5. sqlite3 on python for newbies

    python 集成了 sqlite3 ,其接口很简单: import sqlite3 db_connection = sqlite3.connect(db_filename) db_cursor = ...

  6. Spring配置:用context:property-placeholder替换PropertyPlaceholderConfigurer

    1.有时候需要从properties文件中加载配置,以前的方式是这样的: <bean id="jdbcProperties" class="org.springfr ...

  7. luogu 4147 玉蟾宫 悬线DP

    Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in",& ...

  8. (容量超大)or(容量及价值)超大背包问题 ( 折半枚举 || 改变 dp 意义 )

    题意 : 以下两个问题的物品都只能取有且只有一次 ① 给你 N 个物品,所有物品的价值总和不会超过 5000, 单个物品的价格就可达 10^10 ,背包容量为 B ② 给你 N (N ≤ 40 ) 个 ...

  9. (22)Python练习项目集

    文本操作 逆转字符串——输入一个字符串,将其逆转并输出. 拉丁猪文字游戏——这是一个英语语言游戏.基本规则是将一个英语单词的第一个辅音音素的字母移动到词尾并且加上后缀-ay(譬如“banana”会变成 ...

  10. SpringMVC开发手册

    title: SpringMvc -- 开发手册 date: 2018-11-15 22:14:22 tags: SpringMvc categories: SpringMvc #分类名 type: ...