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

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

(一) 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. css3 宽度百分比减去固定宽度 无效问题

    一定要注意中间横线的间距才有效果 正确 width: calc(50% - 10px); 错误 width:calc(50%-10px);

  2. nuxt.js axios使用poxyTable代理,解决跨域问题

    1 安装(@gauseen/nuxt-proxy) cnpm install @gauseen/nuxt-proxy --save 2 配置nuxt.config.js modules: [ // 请 ...

  3. __new__与__init__的区别

    __new__  : 控制对象的实例化过程 , 在__init__方法之前调用 __init__ : 对象实例化对象进行属性设置 class User: def __new__(cls, *args, ...

  4. 又联考了一场,感觉自己好菜啊,T1没写出来,后来花了一个早上调试。QAQ。最后发现是个-1还有取模没打。。。TAT。。。难受极了!!!

    简单的区间(interval) 题目描述: 样例输入: 样例1: 4 3 1 2 3 4 样例2: 4 2 4 4 7 4 样例输出: 样例1: 3 样例2: 6 提示: 时间限制:1000ms 空间 ...

  5. [BZOJ3236][AHOI2013]作业:树套树/莫队+分块

    分析 第一问随便搞,直接说第二问. 令原数列为\(seq\),\(pre_i\)为\(seq_i\)这个值上一个出现的位置,于是可以简化询问条件为: \(l \leq i \leq r\) \(a \ ...

  6. MySQL Password Expired

    好久没有登录MySQL,登录的时候遇到如下提示: 尝试使用命令行登录,发现是可以使用之前的密码登录的,如下: 只是登录之后,发现做不了什么操作.并且使用,alter 语句重设密码也没有成功,如下: 试 ...

  7. cefsharp 在高DPI下闪烁的问题

    今天有客户朋友说程序在他的surface下界面很闪烁,搜索了相关的资料,初步判定是DPI引起的问题,但也有可能是cefsharp 51版本在WIN10上面没有禁用GPU加速,苦于没有环境测试,所以抱着 ...

  8. React-Native 之 GD (十)Android启动页面 及 模态方式跳转

    1.Android启动页面 思路:新建一个组件作为 Android 的启动页,index.android.js 的初始化窗口改为 Android启动页,设置定时器,使其在1.5秒后自动跳转到 Main ...

  9. Oracle12c ASMM和hugepage

    在Oracle 12c,测试发现默认并不启用AMM 特性,而是使用了ASMM.因为在X86 架构下的linux 平台中,配置hugepage时,也是需要关闭AMM,使用ASMM特性. AMM分配内存的 ...

  10. Gym 100942A Three seamarks

    题目链接: http://codeforces.com/problemset/gymProblem/100942/A ----------------------------------------- ...