1 App.vue
2 <template>
3 <!--
4 组件的自定义事件:
5 1.一种组件间通信的方式,使用于:子组件===>父组件
6 2.使用场景:A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自定义事件(事件的回调在A中)
7 3.绑定自定义事件:
8 .第一种方式,在父组件中:<Demo @custonEvent="test"/> 或 <Demo v-on:custonEvent="test"/>
9 .第二种方式,在父组件中
10 <demo ref="demo" />
11 mounted(){this.$refs.demo.on('custonEvent', this.test)}
12 .若想让自定义事件只杯触发一次,可以使用once事件修饰符,或$once方法
13 4.触发自定义事件:this.$emit('custonEvent', 数据参数)
14 5.解绑自定义事件: this.$off('custonEvent');
15 6.组件上也可以绑定原生DOM事件,需要使用native修饰符
16 7.注意:通过this.$refs.xxx.$on('custonEvent', 回调)绑定自定义事件时,回调要么配置在methods中,要么用箭头函数,否则this指向会出问题。

17  -->
18 <div class="app">
19 <h1>{{msg}}</h1>
20 <!-- 通过父组件给子组件传递函数类型的props实现:子给父传递数据 -->
21 <School :getSchoolName="getSchoolName"/>
22 <!-- 通过父组件给子组件绑定一个自定义事件实现:子给父传递数据。 -->
23 <!-- <Student v-on:customEvent.once="getStudentName"/> 事件修饰符同样可以使用 -->
24 <!-- <Student v-on:customEvent="getStudentName"/> -->
25 <!-- 通过指定ref,在当前组件挂载完(mounted),的时候绑定自定义事件,这种相对比较灵活,比如:三秒后绑定事件 -->
26 <!-- 通过native事件修饰符来绑定原生事件 -->
27 <Student ref="student" @click.native="studentClick"/>
28 </div>
29 </template>

 1 全局事件总线(GlobalEventBus)
2 1.一种组件间通信的方式,适用于任意组件间通信
3 2.安装全局事件总线:
4 new Vue({
5 render: h => h(App),
6 beforeCreate(){
7 Vue.prototype.$bus = this;
8 }
9 }).$mount('#app');
10 3.适用事件总线:
11 a.接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身
12 methods(){
13 demo(data){...}
14 }
15 ...
16 mounted() {
17 this.$bus.$on('xxx', this.demo);
18 },
19 beforeDestroy(){
20 this.$bus.$off('xxx');
21 }
22 b.提供数据:this.$bus.$emit('xxx', data);
23 4.最好在beforeDestroy钩子回调中,用$off去解绑当前组件所用到的事件
24
25
26 消息订阅与发布(pubsub)
27 1.一种组件间通讯的方式,适用于任意组件间通信。
28 2.适用步骤:
29 a.安装pubsub: npm i pubsub-js
30 b.引入:import pubsub from pubsub-js
31 c.接受数据:A组件想接受数据,则在A组件中订阅消息,订阅的回调留在A组件自身
32 methods(){
33 demo(data){....}
34 }
35 ....
36 mounted(){
37 this.pid = pubsub.subscribe('xxx', this.demo);//订阅消息
38 }
39 beforeDestroy(){
40 pubsub.unsubscribe(this.pid);
41 }
42 d.提供数据:pubsub.publish('xxx', data)
43 e.最好在beforeDestroy钩子中,用pubsub.unsubscribe(pid)去取消订阅


30
31 <script>
32 import School from './components/School.vue'
33 import Student from './components/Student.vue'
34
35 export default {
36 name: 'App',
37 components:{
38 School,Student,
39 },
40 data(){
41 return {
42 msg: '你好啊'
43 }
44 },
45 methods:{
46 getSchoolName(name){
47 console.log('App getSchoolName:', name);
48 },
49 getStudentName(name,...a){ // ...a意思是,将其他参数都放到a上面
50 console.log('App getStudentName:', name);
51 console.log('App getStudentName:', a);
52 }
53 },
54 mounted() {
55 // 绑定自定义事件
56 this.$refs.student.$on('customEvent', this.getStudentName);
57
58 // this.$refs.student.$onece('customEvent', this.getStudentName); 事件修饰符
59 }
60 }
61 </script>
62
63 <style>
64 .app{
65 background-color: gray;
66 padding: 5px;
67 }
68 </style>
 1 School.vue
2 <template>
3 <div class="school">
4 <h3>学校名字:{{name}}</h3>
5 <h3>学校地址:{{address}}</h3>
6 <button @click="sendSchoolName" >把学校名传给App</button>
7 </div>
8
9 </template>
10
11 <script>
12 export default {
13 name: 'School',
14 data(){
15 return {
16 name: 'BaiYeShu',
17 address: '深圳'
18 }
19 },
20 props:['getSchoolName'],
21 methods:{
22 sendSchoolName(e) {
23 this.getSchoolName(this.name);
24 }
25 }
26
27 }
28 </script>
29
30 <style scoped>
31 .school{
32 background-color: skyblue;
33 padding: 5px;
34 }
35 </style>
 1 Student.vue
2 <template>
3 <div class="student">
4 <h3>学生姓名:{{name}}</h3>
5 <h3>学生性别:{{sex}}</h3>
6 <button @click="sendStudentName">把学生名发送给App</button>
7 <button @click="unbind">解绑自定义事件</button>
8 </div>
9 </template>
10
11 <script>
12 export default {
13 name: 'School',
14 data(){
15 return {
16 name: '张三',
17 sex: '男',
18 }
19 },
20 methods:{
21 sendStudentName(){
22 // 触发自定义事件
23 this.$emit('customEvent', this.name, 1,2,3);
24 },
25 unbind(){
26 this.$off('customEvent'); // 解绑指定事件
27 // this.$off(['customEvent', 'm1']); // 解绑多个事件
28 // this.$off(); // 解绑所有事件
29 }
30 }
31 }
32 </script>
33
34 <style scoped>
35 .student {
36 background-color: pink;
37 padding: 5px;
38 margin-top: 30px;
39 }
40 </style>

Vue 自定义事件 && 组件通信的更多相关文章

  1. (尚031)Vue_案例_自定义事件(组件间通信第2种方式:vue自定义事件)

    自定义事件: 我们知道,父组件使用prop传递数据的子组件,但子组件怎么跟父组件通信呢? 这个时候Vue的自定义事件系统就派得上用场了. 自定义事件知道两件事: (1).绑定 (2).触发 注意:$o ...

  2. Vue自定义事件

    前面的话 父组件使用props传递数据给子组件,子组件怎么跟父组件通信呢?这时,Vue的自定义事件就派上用场了.本文将详细介绍Vue自定义事件 事件绑定 每个 Vue 实例都实现了事件接口 (Even ...

  3. Vue 非父子组件通信方案

    Vue 非父子组件通信方案 概述 在 Vue 中模块间的通信很普遍 如果是单纯的父子组件间传递信息,父组件可以使用 props 将数据向下传递到子组件,而在子组件中可以使用 events (父组件需要 ...

  4. Vue的父子组件通信(转载)

    Vue是一个轻量级的渐进式框架,对于它的一些特性和优点在此就不做赘述,本篇文章主要来探讨一下Vue子父组件通信的问题 首先我们先搭好开发环境,我们首先得装好git和npm这两个工具(如果有不清楚的同学 ...

  5. Vue学习笔记-组件通信-子传父(自定义事件)

    props用于父组件向子组件传递数据,还有一种比较常见的是子组件传递数据或事件到父组件中.我们应该如何处理呢?这个时候,我们需要使用自定义事件来完成.什么时候需要自定义事件呢?当子组件需要向父组件传递 ...

  6. vue自定义事件 子组件把数据传出去

    每个 Vue 实例都实现了事件接口(Events interface),即: 使用 $on(eventName) 监听事件 使用 $emit(eventName) 触发事件 1.使用v-on绑定自定义 ...

  7. Vue 非父子组件通信

    组件是Vue核心的一块内容,组件之间的通信也是很基本的开发需求.组件通信又包括父组件向子组件传数据,子组件向父组件传数据,非父子组件间的通信.前两种通信Vue的文档都说的很清楚,但是第三种文档上确只有 ...

  8. 浅谈vue学习之组件通信

    vue用组件化简化了我们编写代码的复杂度,组件之间经常会出现数据传递的情况,那么组件之间是怎样通信的呢? 使用props传递数据 组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内 ...

  9. 【VUE】7.组件通信(二)子组件修改父组件

    1. 前提&知识点 1./components/Father.vue 是父组件, Son.vue 是子组件 2.子组件修改父组件 emit 2. 组件通信 1. 首先对子组件绑定一个事件 ch ...

随机推荐

  1. MYSQL如何比对版本号字符串

    MYSQL如何比对版本号字符串 mysql 数据库中存储了一个形如"2.7.6.526" 的版本号,现在要获取出小于某个版本号的数据,怎么做?这个就是昨天遇到的一个问题,记录下查到 ...

  2. Helloworld 驱动模块加载

    介绍 本文引用<linux设备驱动开发>书中部分解释,记录开篇第一章helloworld程序 以下内容需要掌握如下基础信息linux模块概念.链接编译.c语言基础 内容 helloworl ...

  3. 20 HTTP 长连接与短连接

    20 HTTP 长连接与短连接 每日一句 纸上得来终觉浅,绝知此事要躬行. 每日一句 Never give up until the fight is over. 永远不要放弃,要一直战斗到最后一秒. ...

  4. MOS管实现的STC自动下载电路

    目录 MOSFET, MOS管基础和电路 MOS管实现的STC自动下载电路 三极管配合 PMOS 管控制电路开关 STC MCU在烧录时, 需要断电重置后才能进入烧录状态, 通常是用手按开关比较繁琐. ...

  5. Django对接支付宝Alipay支付接口

    最新博客更新见我的个人主页: https://xzajyjs.cn 我们在使用Django构建网站时常需要对接第三方支付平台的支付接口,这里就以支付宝为例(其他平台大同小异),使用支付宝开放平台的沙箱 ...

  6. 【原创】快速理解Unicode和utf-8的本质

    字符串编码 基本概念 在代码中处理,为了字节统一,都统一使用Unicode 核心:在pyhton中s.encode("utf-8")中的变量实例s必须是已经是Unicode格式,否 ...

  7. 用Arduino显示颜色序列(u8g2,OLED)

    目录 用Arduino显示颜色序列(u8g2,OLED) 用Arduino显示颜色序列(u8g2,OLED) 提前祝大家新年快乐! 主控:Arduino Mega 2560 硬件:126×64 OLE ...

  8. 用C语言实现井字棋(人人/AI人机)--完结版

    目录 用C语言实现井字棋(人人/AI人机)--完结版 BUG与优化3: 1. 修改了step的计算方法,每个玩家玩完就加一次step 2. 改变了电脑下棋的逻辑,每个玩家玩完之后都跳过这次循环 源码: ...

  9. CabloyJS 4.12震撼发布,及新版教程尝鲜

    引言 凡是可以用 JavaScript 来写的应用,最终都会用 JavaScript 来写 | Atwood 定律 目前市面上出现的大多数与 NodeJS 相关的框架,基本都将 NodeJS 定位在工 ...

  10. 1.数据结构《Pytorch神经网络高效入门教程》Deeplizard

    当移动一个数组或向量时,我们需要一个索引:二维数组/矩阵需要两个索引, 比如说标量是零维张量,数组/向量/矢量是一维张量,矩阵是是二维张量,n维数组是n维张量. 如果我们被告知,  假设有一个张量t, ...