一.父组件传到子组件


父组件是通过props属性给子组件通信的
数据是单向流动 父—>子 (子组件中修改props数据,是无效的,会有一个红色警告)

1 . 父组件parent.vue代码如下:

 <template><div class="parent"><h2>{{ msg }}</h2><son :fa-msg="msg"></son> <!-- 子组件绑定faMsg变量,注意驼峰--></div></template><script>import son from './Son' //引入子组件export default {name: 'HelloWorld',data () {return {msg: '父组件',}},components:{son},}</script>

2 . 子组件son代码如下:

 <template><div class="son"><p>{{ sonMsg }}</p><p>子组件接收到内容:{{ faMsg }}</p></div></template><script>export default {name: "son",data(){return {sonMsg:'子组件',}},props:['faMsg'],//接收psMsg值}
</script>

子组件通过props来接受数据

第一种方法

props: ['childCom']

第二种方法

props: {childCom: String //这里指定了字符串类型,如果类型不一致会警告的哦
}

第三种方法

props: {childCom: {type: String,default: 'sichaoyun' }
}

二.子组件向父组件传值


通过绑定事件然后及$emit传值

vue2.0只允许单向数据传递,我们通过出发事件来改变组件的数据

1.父组件parent代码如下:

父组件通过绑定自定义事件,接受子组件传递过来的参数

 <template><div class="parent"><h2>{{ msg }}</h2><p>父组件接手到的内容:{{ username }}</p><son psMsg="我是你爸爸" @transfer="getUser"></son> <!-- 监听子组件触发的transfer事件,然后调用getUser方法 --></div></template><script>import son from './Son'export default {name: 'HelloWorld',data () {return {msg: '父组件',username:'',}},components:{son},methods:{getUser(msg){this.username= msg}}}</script>

2.子组件son代码如下:

子组件通过$emit触发父组件上的自定义事件,发送参数

 <template><div class="son"><p>{{ sonMsg }}</p><p>子组件接收到内容:{{ psMsg }}</p><!--<input type="text" v-model="user" @change="setUser">--><button @click="setUser">传值</button></div></template><script>export default {name: "son",data(){return {sonMsg:'子组件',user:'子传父的内容'}},props:['psMsg'],methods:{setUser:function(){this.$emit('transfer',this.user)//触发transfer方法,this.user 为向父组件传递的数据}}}</script>

3. 非父子传参 (事件总线)

假设你有两个Vue组件需要通信: A 和 B ,A组件按钮上面绑定了点击事件,发送一则消息,B组件接收。

1. 初始化,全局创建$bus
直接在项目中的 main.js 初始化 $bus :

// main.js
window.$bus=new Vue();

注意,这种方式初始化一个 全局的事件总线

2. 发送事件
$bus.$emit("aMsg", '来自A页面的消息');

<!-- A.vue -->
<template><button @click="sendMsg()">-</button>
</template><script>
//import $bus from "../bus.js";
export default {methods: {sendMsg() {$bus.$emit("aMsg", '来自A页面的消息');}}
};
</script>

接下来,我们需要在 B页面 中接收这则消息。

4. 接收事件
$bus.$on("事件名",callback)

<!-- IncrementCount.vue -->
<template><p>{{msg}}</p>
</template><script>
//import $bus  from "../bus.js";
export default {data(){return {msg: ''}},mounted() {$bus.$on("aMsg", (msg) => {// A发送来的消息this.msg = msg;});}
};
</script>

<<<<<<<<<<<<<<下方是拓展,面试不必说>>>>>>>>>>>

事件总线推荐下面写法:


集中式的事件中间件就是 Bus。我习惯将bus定义到全局:
app.js


var eventBus = {install(Vue,options) {Vue.prototype.$bus = vue}
};
Vue.use(eventBus);

然后在组件中,可以使用$emit, $on, $off 分别来分发、监听、取消监听事件
分发事件的组件

// ...
methods: {todo: function () {this.$bus.$emit('todoSth', params);  //params是传递的参数//...}
}

监听的组件

// ...
created() {this.$bus.$on('todoSth', (params) => {  //获取传递的参数并进行操作//todo something})
},
// 最好在组件销毁前
// 清除事件监听
beforeDestroy () {this.$bus.$off('todoSth');
}

如果需要监听多个组件,只需要更改 bus 的 eventName:

// ...
created() {this.$bus.$on('firstTodo', this.firstTodo);this.$bus.$on('secondTodo', this.secondTodo);
},
// 清除事件监听
beforeDestroy () {this.$bus.$off('firstTodo', this.firstTodo);this.$bus.$off('secondTodo', this.secondTodo);
}

Vue组件通信(父传子、子传父、兄弟通信)相关推荐

  1. vue 移动端头像裁剪_vue头像上传裁剪组件_一个漂亮的Vue组件,用于图像裁剪和上传...

    vue头像上传裁剪组件 vue-image-crop-upload (vue-image-crop-upload) A beautiful vue component for image crop a ...

  2. vue组件系列2、拖放上传

    2019独角兽企业重金招聘Python工程师标准>>> 直接上源码,就是样式不太好看,但是该有的功能都有啦 <template><divclass="pr ...

  3. vue组件间传值的六种方法

    一. vue组件间传值 1. 父组件向子组件进行传值props 父组件代码: <template><div>父组件:<input type="text" ...

  4. vue组件之间的传值(兄弟间的传值)

    概要:vue组件之间的传值大致有三种:父传子,子传父,还有兄弟之间,今天我们主要来讲兄弟之间的传值.废话不多说,我们直奔主题 vue 组件兄弟间的传值是要通过一个事件总线来实现(可以把事件总线理解为一 ...

  5. 如何在vue 中使用组件,以及组件通信的方式(父传子/子传父/兄弟传)

    文章目录 前言 零.如何使用封装组件 一.为什么需要下面的通信方式 二.父组件给子组件通信 三.子组件给父组件通信 四.兄弟组件通信 五.多层组件之间的通信 总结 前言 组件可以说是 vue 中最为核 ...

  6. Vue组件之间的通信-父传子-子传父

    文章目录 Vue的组件嵌套 Vue组件间通信 1.父组件传递给子组件 1.1数组的方式 1.2对象的方式 2.子组件传递给父组件 Vue的组件嵌套 前面我们是将所有的逻辑放到一个App.vue中: 在 ...

  7. Vue组件通信:父传子、子传父、跨组件通信

    方法一:组件通信_父传子_props(属性绑定) 在进行组件通信之前,我们首先要明确父和子是谁,父传子=>在父中引入子(被引入的是子) 1. 父传子,要先在子组件内定义props变量,准备接收, ...

  8. vue组件通信,点击传值,动态传值(父传子,子传父)

    vue说到组件通信,无非是父组件传子组件,子组件传父组件,跨级组件传值,同级组件传值,个人觉得,除了父子组件的传值,其余情况就可以用vuex来解决了,这篇先不说vuex,这里介绍父子组件传值.不会你打 ...

  9. vue组件通信:父传子—子传父

    我们都知道组件是vue里很重要的一个知识点,这里我看的是b站上的coderwhy老师的视频 我看到了弹幕上说很多人在这一块不理解:下面我就来写分享以下我的课程总结 父传子 为什么要进行"传& ...

最新文章

  1. 2019年IT人加薪的9大神器
  2. How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?
  3. Markdown大法的尝试
  4. java中string.trim()函数
  5. QT设计器主界面中文介绍
  6. 电脑刚开机显示正在锁定计算机在怎么回事,电脑开机一直停留在诊断自动修复界面怎么回事...
  7. 客户端自动化测试研究
  8. 风格指南——Solidity中文文档(10)
  9. 自动增量字段重新从1开始的方法
  10. flash遮住层解决办法
  11. 3月15日 卡尔曼与多元传感器融合
  12. ElasticJob‐Lite:自定义作业分片策略
  13. osgEarth gpx文件 16.feature_gpx.earth
  14. MP2669GR-锂电池充电管理芯片
  15. html可编辑段落,javascript – HTML5内容列表后的可编辑段落
  16. micrium ucprobe使用指南
  17. USB key身份认证介绍
  18. 软件研发的绩效考核漫谈一
  19. 堪比端游!欧美十大RPG网页游戏推荐
  20. 双十一,一群金融大脑去了趟苏州!

热门文章

  1. Matlab实现倒谱法 求 基音频率和共振峰
  2. 给你一台大疆无人机,你能用来做点啥?(一)----------获取正射影像
  3. Centos7.x上安装cerebro
  4. JMeter发送数据到Kafka
  5. 打包docker镜像,推送远程服务器,部署到k8s步骤
  6. QT creator 新建项目
  7. 机器学习之recall、precision、accuracy
  8. 【那些年做过的设计 · 纪念贴】UI设计中移动端和PC端之间具体有什么区别
  9. java代码如何运行?
  10. 36个助你成为专家需要掌握的JavaScript概念