Vue:自定义组件事件

news2024/11/25 2:32:34

一、直接在组件标签上绑定事件

1、关于组件的自定义事件,实现步骤:

①提供事件源(这个事件源是一个组件)②给组件绑定事件:v-on:事件名  或者  @事件名

③编写回调函数,将回调函数和事件进行绑定。

④等待事件的触发,只要事件触发,则执行回调函数。

对于组件自定义事件来说,要想让事件发生,需要去执行一段代码。

这段代码负责去触发这个事件,让这个事件发生。

事件绑定在A组件上,则触发这个事件的代码要在A组件当中编写。

2、总结:父子组件之间的通信

①父---子:props

②子---父:在父中定义一个方法,将方法传递给子,然后在子中调用父传过来的方法,这样给父传数据。(这种方式以后很少使用)

使用组件的自定义事件的方式,也可以完成子向父传数据。

在父组件当中绑定事件。在子组件当中触发事件。即:父绑定,子触发。

对于事件的once修饰符来说,组件的自定义事件也是可以使用的。

3、相关代码

子组件

<template>
  <div>
    <button @click="triggerFirst">触发一</button>
  </div>
</template>

<script>
export default {
  name: "User",
  data() {
    return {
      name: "phb",
      age: 20,
      gender: "man",
    };
  },
  methods: {
    triggerFirst() {
      //触发first事件
      this.$emit("one", this.name, this.age, this.gender);
    },
  },
};
</script>

this.$emit中的this指向的是组件实例,触发的同时可以给事件绑定的回调函数传数据 

父组件

<template>
  <div>
    <User v-on:one="first"></User>
    <User @one.once="first"></User>
  </div>
</template>
<script>
import User from "./components/User.vue";
export default {
  name: "App",
  methods: {
    first(name, age, gender) {
      console.log("自定义组件1");
      console.log(name, age, gender);
    },
  },
  components: { User },
};
</script>

二、通过代码给组件绑定事件

在父组件当中:
<User ref="user"></User >
mounted(){ // 表示挂载完毕后给组件绑定事件。
    // 这种方式更加灵活。例如:希望 AJAX 请求响应回来数据之后再给组件绑定事件。
    this.$refs.user .$on('one', this.first)
}
this.$refs.user.$once('one', this.first) 表示只触发一次。
绑定时要注意:
this.$refs.user.$on('one', function(){
    //这里的 this 是子组件实例(user 组件实例)
})
this.$refs.user.$on('one', ()=>// 这里的 this 是父组件实例(App 组件实例) })
this.first这个回调函数写成普通函数时:函数体中 this 是子组件实例。(user组件实例)
this.first这个回调函数写成箭头函数时:函数体中 this 是父组件实例。(App 组件实例)

 三、解绑事件

methods : {
    unbinding(){
        this.$off(‘event1’) // 这种方式只能解绑一个事件。
        this.$off([‘event1’, ‘event2’]) // 这种方式解绑多个事件。
        this.$off() // 解绑所有事件。
    }
}
注意: vm vc 销毁的时候,所有组件以及子组件当中的事件会全部解绑。

四、全局事件总线 

1、原理:

给项目中所有的组件找一个共享的 vc 对象。把这个共享的对象 vc 叫做全局事件总线。所有的事件都可以 绑定到这个共享对象上。所有组件都通过这个全局事件总线对象来传递数据。这种方式可以完美的完成兄弟组件之间传递数据。

2、共享对象必须具备两个特征:

① 能够让所有的 vc 共享。
main.js 文件中:
// 获取 VueComponent 构造函数
const VueComponentConstructor = Vue.extend({})
// 创建 vc
const vc = new VueComponentConstructor()
// 让所有的 vc 都能够使用这个 vc
Vue.prototype.$bus = vc
② 共享对象上有$on$off$emit 等方法。(建议)
main.js 文件中:
new Vue({
    el : '#app',
    render : h => h(App),
    beforeCreate(){
        Vue.prototype.$bus = this
    }
})
:A 组件向 B 组件传数据,应该在 B 组件中绑定事件(接),应该在 A组件中触发事件(传)。
 

3、事件类型

数据发送方:触发事件

methods : {
    triggerFirst(){
    this.$bus.$emit(‘one’, 传数据)
    }
}

数据接收发:绑定事件

mounted(){
    this.$bus.$on(‘one’, this.first)
}

组件销毁:组件实例被销毁前,将绑定在$bus 上的事件解绑。

beforeDestroy(){
    this.$bus.off(‘one’)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NeRF:今年最火的AI技术

转载&#xff1a; https://mp.weixin.qq.com/s?__bizMzIxOTczOTM4NA&mid2247549727&idx2&snc59e18cb2bd8dfe34eafdc6e7cf9f4fd&chksm97d4e688a0a36f9ea0ed4c5a988a3802b4e9265655c5c0a6f208a396860f3842abae9be3a9a3&scene27 什么是NeRF&#xff1f; Ne…

springboot解决ajax跨域问题

方式1:使用CrossOrigin注解方式 CrossOrigin(origins "*") //解决跨域的关键注解,该注解可以标注在类上也可以标注在方法上域A&#xff1a;http://localhost/across_test/test.html 域A下的test.html <!DOCTYPE html> <html lang"en"> <h…

Three——一、详解基础场景搭建(结尾含完整代码)

速成Three.js——一、详解基础场景搭建(结尾含源码) 给模型添加标签时需要准标签部分 从本章开始会从最初的搭建场景模型开始到插入精灵图部分结尾&#xff0c;便于刚入门three而不知如何去学起的前端工程师去学习&#xff0c;这里可以学到场景搭建的基础知识&#xff0c;引入…

【微服务笔记12】微服务组件之Hystrix和OpenFeign结合使用

这篇文章&#xff0c;主要介绍微服务组件之Hystrix和OpenFeign结合使用。 目录 一、Hystrix和OpenFeign结合使用 1.1、引入依赖 1.2、openfeign启用hystrix 1.3、编写FeignClient接口 1.4、编写FeignClient实现类 1.5、编写Controller控制器 1.6、启动类启动OpenFeign …

Apache网页的优化,安全与防盗链

在企业中&#xff0c;部署Apache后只采用默认的配置参数&#xff0c;会引发网站很多问题&#xff0c;换言之默认配置是针对以前较低的服务器配置的&#xff0c;以前的配置已经不适用当今互联网时代。 为了适应企业需求&#xff0c;就需要考虑如何提升Apache的性能与稳定性&…

智慧水务系统-全域孪生驾驶舱-三维实景模型

平台概述 柳林智慧水务系统平台是以物联感知技术、大数据、智能控制、云计算、人工智能、数字孪生、AI算法、虚拟现实技术为核心&#xff0c;以监测仪表、通讯网络、数据库系统、数据中台、模型软件、前台展示、智慧运维等产品体系为支撑&#xff0c;以城市水资源、水生态、水…

LeetCode-152. 乘积最大子数组

目录思路动态规划题目来源 152. 乘积最大子数组 思路 这题跟LeetCode-53. 最大子数组和很像 最后把整个 dp 数组看一遍求最大值即可。因此状态转移方程可能是&#xff1a; dp[i] Math.max(dp[i-1]nums[i],nums[i]);说明&#xff1a;牢记状态的定义&#xff0c;一定以下标 i…

Android13 PMS是如何启动的?

作者&#xff1a;Arthas0v0 平常使用安卓实际就是在使用各种app&#xff0c;而下载的app实际是一个apk文件。这个apk文件的安装就交给了PackageManagerService来实现。PackageManagerService的启动也是在SystemServer中。这个过程比较长需要长一点的时间来理。 SystemServer.s…

2023-04-09 有向图及相关算法

有向图及相关算法 1 有向图的实现 有向图的的应用场景 社交网络中的关注互联网连接程序模块的引用任务调度学习计划食物链论文引用无向图是特殊的有向图&#xff0c;即每条边都是双向的 改进Graph和WeightedGraph类使之支持有向图 Graph类的改动WeightedGraph类的改动 2 …

肖 sir_就业课__004项目流程(H模型)

项目流程&#xff1a; 一、面试提问&#xff08;h模型&#xff09; 1、你说下你们公司测试流程&#xff1f; 2、给你一个需求你会怎么做? 3、你讲下你的工作&#xff1f; 4、谈谈你是如何去测试&#xff1f; 答案&#xff1a;h模型 要求第一人称来写 讲解简化文字流程&#x…

基于Python实现的深度学习技术在水文水质领域应用

目录 一、深度学习的基本概念和发展现状 二、Python系列开源软件包基本用法 三、前馈神经网络模型、原理和代码实现 四、前馈神经网络模型在水质、水位预测中的应用 五、卷积神经网络模原理、结构和应用&#xff0c;与支持向量机进行比较 六、循环神经网络原理与结构 七…

web 页面在浏览器运行eval性能分析和优化

公司有个低代码老项目&#xff0c;里面有一些自定义脚本运行使用了大量的eval 动态运行。 分析 网上对eval 的争论也非常激烈&#xff0c;大部分不建议使用&#xff0c;一些人观点是用不好才导致问题。 eval 是否真的存在效率问题&#xff1f; eval is evil 我们知道new Fun…

定时任务-常用的cron表达式

常用cron表达式例子&#xff1a; &#xff08;1&#xff09;0/2 * * * * ? 表示每2秒 执行任务 &#xff08;1&#xff09;0 0/2 * * * ? 表示每2分钟 执行任务 &#xff08;1&#xff09;0 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务 &#xff08;2&#xff09;0 15 1…

宝塔设置PHP定时任务实战记录(定时任务、ajax异步刷新API、shell脚本、访问url)

文章目录项目需求生产环境一、php定时任务二、实战开发1.创建mysql数据表2.入库封装函数&#xff08;1&#xff09;封装入库&#xff08;2&#xff09;入库操作3.定时任务的实现&#xff08;1&#xff09;$ajax异步调用法&#xff08;2&#xff09;宝塔定时访问url&#xff08;…

http请求头部(header)详解

通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行&#xff0c;一个或者多个头域&#xff0c;一个只是头域结束的空行和可 选的消息体组成。HTTP的头域包括通用头&#xff0c;请求头&#xff0c;响应头和实体头四个部分。每个…

OpenShift 4 - 通过 SSH 远程访问 OpenShift Virtualization 的虚拟机

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证 在《OpenShift 4 - 用 OpenShift Virtualization 运行容器化虚拟机 &#xff08;视频&#xff09;》一文中使用了 OpenShift 控制台直接访问运行在 OpenSh…

【Python实战】从架构设计到实现:一个Powerful的图书管理系统

&#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#xff1a;Zeeland&#x1f4da; Github主页: Undertone0809 (Zeeland) (github.com)&…

栈的压入,栈的弹出,最小栈,用队列实现栈,设计循环队列

栈的压入&#xff0c;栈的弹出 输入两个整数序列&#xff0c;第一个序列表示栈的压入序列&#xff0c;判断第二个序列是否可能是该栈的弹出序列&#xff0c;假设压入栈中的所有数字均不相等&#xff0c;如pushA:1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5是某栈的…

day11 有名管道和无名管道

无名管道基础 进程间的通信 概念&#xff1a; 进程间的通信就是进程和进程之间交换信息&#xff1b; 常用方式&#xff1a; 无名管道&#xff08;pipe&#xff09; 有名管道&#xff08;fifo&#xff09; 信号&#xff08;signal&#xff09; 共享内存&#xff08;mmap…

DOS批处理文件---内嵌参数变量扩充功能

1 内嵌参数变量 1.1 介绍 内嵌参数变量指&#xff1a;%i&#xff0c;其中i为大于等于0的整数。如%0&#xff0c; %1&#xff0c; %2&#xff0c;... 1.2 作用 可以客制化功能。 1.3 案例 批处理文件&#xff1a;main_Param.bat echo off && setlocal ENABLEDELA…