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

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

(一) 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>

    

     

最新文章

  1. Top 10 Methods for Java Arrays
  2. webstorm 文件历史找回~ 恢复正确状态~
  3. Linq专题之创建Linq查询表达式
  4. 如何实现SSH断开后 进程仍然在后台运行
  5. hbase操作的问题
  6. BFM1
  7. Beanstalkd介绍
  8. dl dt dd标签
  9. git操作标签
  10. C# 字段、属性、成员变量
  11. MySQL XtraBackup备份脚本
  12. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十六)
  13. MongoDB 3.0 WT引擎参考配置文件
  14. SQL Server最大内存设为0后的处置办法
  15. 不允许lseek文件 | nonseekable_open()【转】
  16. MySQL之路 ——2、步履维艰的建表
  17. Codeforces Round #539--1113B - Sasha and Magnetic Machines
  18. libtorch初体验
  19. robotium之无name、ID仅有desc定位
  20. zabbix 3.4新功能值解析——Preprocessing预处理

热门文章

  1. 【NOIP2012模拟8.20】Memory
  2. HTML5基础知识汇总(一)
  3. layui jquery ajax,url,type,async,dataType,data
  4. #431 Div2 Problem B Tell Your World (鸽巢原理 &amp;&amp; 思维)
  5. window cmd 命令行下创建文件夹和文件
  6. jsoncpp 能做什么
  7. @ResponseBody返回4种数据格式的数据
  8. 大数据笔记(七)——Mapreduce程序的开发
  9. ES6 对象超类
  10. ARM非对齐访问和Alignment Fault