Vue组件通信(父传子、子传父、兄弟通信)
一.父组件传到子组件
父组件是通过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组件通信(父传子、子传父、兄弟通信)相关推荐
- vue 移动端头像裁剪_vue头像上传裁剪组件_一个漂亮的Vue组件,用于图像裁剪和上传...
vue头像上传裁剪组件 vue-image-crop-upload (vue-image-crop-upload) A beautiful vue component for image crop a ...
- vue组件系列2、拖放上传
2019独角兽企业重金招聘Python工程师标准>>> 直接上源码,就是样式不太好看,但是该有的功能都有啦 <template><divclass="pr ...
- vue组件间传值的六种方法
一. vue组件间传值 1. 父组件向子组件进行传值props 父组件代码: <template><div>父组件:<input type="text" ...
- vue组件之间的传值(兄弟间的传值)
概要:vue组件之间的传值大致有三种:父传子,子传父,还有兄弟之间,今天我们主要来讲兄弟之间的传值.废话不多说,我们直奔主题 vue 组件兄弟间的传值是要通过一个事件总线来实现(可以把事件总线理解为一 ...
- 如何在vue 中使用组件,以及组件通信的方式(父传子/子传父/兄弟传)
文章目录 前言 零.如何使用封装组件 一.为什么需要下面的通信方式 二.父组件给子组件通信 三.子组件给父组件通信 四.兄弟组件通信 五.多层组件之间的通信 总结 前言 组件可以说是 vue 中最为核 ...
- Vue组件之间的通信-父传子-子传父
文章目录 Vue的组件嵌套 Vue组件间通信 1.父组件传递给子组件 1.1数组的方式 1.2对象的方式 2.子组件传递给父组件 Vue的组件嵌套 前面我们是将所有的逻辑放到一个App.vue中: 在 ...
- Vue组件通信:父传子、子传父、跨组件通信
方法一:组件通信_父传子_props(属性绑定) 在进行组件通信之前,我们首先要明确父和子是谁,父传子=>在父中引入子(被引入的是子) 1. 父传子,要先在子组件内定义props变量,准备接收, ...
- vue组件通信,点击传值,动态传值(父传子,子传父)
vue说到组件通信,无非是父组件传子组件,子组件传父组件,跨级组件传值,同级组件传值,个人觉得,除了父子组件的传值,其余情况就可以用vuex来解决了,这篇先不说vuex,这里介绍父子组件传值.不会你打 ...
- vue组件通信:父传子—子传父
我们都知道组件是vue里很重要的一个知识点,这里我看的是b站上的coderwhy老师的视频 我看到了弹幕上说很多人在这一块不理解:下面我就来写分享以下我的课程总结 父传子 为什么要进行"传& ...
最新文章
- 2019年IT人加薪的9大神器
- How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?
- Markdown大法的尝试
- java中string.trim()函数
- QT设计器主界面中文介绍
- 电脑刚开机显示正在锁定计算机在怎么回事,电脑开机一直停留在诊断自动修复界面怎么回事...
- 客户端自动化测试研究
- 风格指南——Solidity中文文档(10)
- 自动增量字段重新从1开始的方法
- flash遮住层解决办法
- 3月15日 卡尔曼与多元传感器融合
- ElasticJob‐Lite:自定义作业分片策略
- osgEarth gpx文件 16.feature_gpx.earth
- MP2669GR-锂电池充电管理芯片
- html可编辑段落,javascript – HTML5内容列表后的可编辑段落
- micrium ucprobe使用指南
- USB key身份认证介绍
- 软件研发的绩效考核漫谈一
- 堪比端游!欧美十大RPG网页游戏推荐
- 双十一,一群金融大脑去了趟苏州!