vuejs源码分析之全局API(vm.$off)

news2024/7/6 20:01:53

vue在初始化的时候会给vue对象本身挂载一些全局的api。今天我们一个一个来看这些api。

vm.$off方法

这个方法是用来移除自定义事件监听器。
他的用法

vm.$off(event, calback)

第一个参数event取值可以是string字符串,也可以是Array<string>也就是说既可以删除一个事件,也可以删除指定的多个。

第二个参数callback是Function函数类型。

也就是说移除这个事件对应的函数。

  • 如果没有提供参数,则移除所有的事件监听器
  • 如果只提供了事件,则移除该事件所有的监听器
  • 如果同时提供了事件与回调,则只移除这个回调的监听器

没有参数的情况下

没有参数我们需要移除所有事件的监听器。代码如下:

Vue.prototype.$off = function ( 
    event?: string | Array<string>,
    fn?: Function): Component {
    const vm: Component = this
    // 移除所有事件的监听器
    if (!arguments.length) {
        vm._events = Object.create(null)
        return vm
    }
    return vm;
}

从代码我们看出来当arguments.length为0的时候,说明没有任何参数,这时就需要移除所有的事件监听器,因此我们重置了vm._events属性。
vm._evnents属性存储了所有事件。所以将vm.events重置为初始状态就等于将所有事件都移除了。

第一个参数是数组的情况

vm.$off的第一个参数event支持数组,所以接下来需要处理event参数为数组的情况。

其处理逻辑很简单,只需要将数组遍历一遍,然后数组中每一项依次调用vm.$off即可。

 Vue.prototype.$off = function (
    event?: string | Array<string>,
    fn?: Function
  ): Component {
    const vm: Component = this
    // 移除所有事件的监听器
    if (!arguments.length) {
        vm._events = Object.create(null);
        return vm;
    }

    // 新增代码
    if (Array.isArray(event)) {
        for (let i = 0, l = event.length; i < l; i++) {
            this.$off(event[i], fn);
        }
        return vm;
    }

    return vm;
}

在上面代码中,event参数是数组时,遍历它并依次调用this. o f f 。代码中 t h i s . off。代码中this. off。代码中this.off和vm.$off是同一个方法,vm是this的别名。

有事件名,但是没有回调函数

则移除该事件所有监听器。将this._events中将event重置为空即可。

const cbs = vm._events[event];
if (!cbs) {
    return vm;
}

// 移除该事件的所有监听器
if (arguments.length === 1) {
    vm._events[event] = null
    return vm;
}

事件和回调都有的情况

只需要使用参数提供的事件名从vm._events上取出事件列表。然后从列表中找到与参数提供回调函数相同的那个函数,并将它从列表中移除。

 if (fn) {
      const cbs = vm._events[event];
      let cb;
      let i = cbs.length;
      while (i--) {
          cb = cb[i];
          if (cb === fn || cb.fn === fn) {
              cbs.splice(i, 1);
              break;
          }
      }
  }

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

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

相关文章

mysql8查看执行sql历史日志、慢sql历史日志,配置开启sql历史日志general_log、慢sql历史日志slow_query_log

0.本博客sql总结 -- 1.查看参数 -- 1.1.sql日志和慢sql日志输出方式(TABLE/FILE)。global参数 SHOW GLOBAL VARIABLES LIKE log_output; -- 1.2.sql日志开关。global参数 SHOW GLOBAL VARIABLES LIKE general_log%; -- 1.3.慢sql日志开关。global参数 SHOW GLOBAL VARIABLE…

wpf 3d 坐标系和基本三角形复习

wpf 3d 坐标系的描述见此&#xff0c; WPF 3d坐标系和基本三角形_wpf 坐标系_bcbobo21cn的博客-CSDN博客 X轴正向向右&#xff0c;Y轴正向向上&#xff1b;Z轴&#xff0c;正向是从屏幕里边出来&#xff0c;负向是往屏幕里边去&#xff1b;坐标原点是在呈现区域的中心&#x…

TestDataLake在提升测试效能方面的实践

目录 1.背景 2.预期目标 3.系统设计和实现 3.1系统功能组成 3.2 数据智能生成 3.3 接口遍历测试 4.应用效果和收益 5.后续规划 1.背景 随着软件开发的迅速发展&#xff0c;测试数据管理变得越来越复杂。手动创建测试数据需要耗费大量时间和精力&#xff0c;同时容易出…

bigemap用于自然资源调查规划设计院

获取途径&#xff1a;之前看到别人使用我们软件&#xff0c;然后去我们官网下载地图体验了一下&#xff0c;想试试。买单点&#xff1a;影像清晰&#xff0c;最主要是使用手机端&#xff0c;跑外业&#xff0c;定位&#xff0c;记录轨迹&#xff0c;拍照&#xff0c;等高线制作…

网络安全进阶学习第十三课——SQL注入Bypass姿势

文章目录 一、等号被过滤二、substr、mid等被过滤三、逗号被过滤四、and/or被过滤五、空格被过滤五、其他绕过方式 一、等号被过滤 1、like&#xff0c;rlike语句&#xff0c;其中rlike是正则2、大于号>&#xff0c;小于号<3、符号<>&#xff1a;<>为不等于…

认识 spring AOP (面向切面编程) - springboot

前言 本篇介绍什么是spring AOP, AOP的优点&#xff0c;使用场景&#xff0c;spring AOP的组成&#xff0c;简单实现AOP 并 了解它的通知&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 什么是s…

Automa-通过连接块来自动化你的浏览器

1、前言 通过浏览器插件可实现自动化脚本的录制与编写&#xff0c;具有代表性的工具就是&#xff1a;Selenium IDE、Katalon Recorder&#xff0c;对于简单的业务来说可快速实现自动化的上手工作。 Selenium IDE Katalon Recorder 如果你想学习接口自动化测试&#xff0c;我这…

1990-2021年31省数字经济测算指标(20多个指标)

1990-2021年31省数字经济测算指标&#xff08;20多个指标&#xff09; 1、来源&#xff1a;国家统计局 2、时间&#xff1a;1990-2021年 3、范围&#xff1a;31省 4、指标&#xff1a; 地区、年份、邮电业务总量、邮政业务总量、电信业务总量、函件数(亿件)、包裹数(万件)、…

selenium常用API的使用

目录 定位元素&#xff08;findElement&#xff09; CSS选择器定位 xpath选择器定位 CSS选择器和xpath选择器区别 操作测试对象 click&#xff1a;点击 sendKeys&#xff1a;输入文本框内容 clear&#xff1a;清除文本框内容 text&#xff1a;获取元素文本内容 …

JVM之类加载与字节码(二)

3. 编译期处理 什么是语法糖 所谓的 语法糖 &#xff0c;其实就是指 java 编译器把 *.java 源码编译为 *.class 字节码的过程中&#xff0c;自动生成 和转换的一些代码&#xff0c;主要是为了减轻程序员的负担&#xff0c;算是 java 编译器给我们的一个额外福利&#xff08;给…

看跨境电商世界区域分布,Live Market教你深入参与跨境创业

随着全球化发展带来互联网技术的进步和平台经济的触角伸向全球&#xff0c;跨境电商越来越成为全球贸易的重要组成部分。根据国际数据公司&#xff08;IDC&#xff09;的最新数据显示&#xff0c;全球前五大跨境电商平台分别是亚马逊、阿里巴巴、eBay、Wish和京东全球购。这五家…

【Linux】内核线程创建 kthread_run 函数和内核中断

kthread_run函数详解 以PCIE的热插拔内核线程创建为例说明 注意&#xff1a;内核线程和RTOS的线程略有不同&#xff0c;这里Linux上创建以后直接运行&#xff0c;RTOS上有的是需要加入到调度队列中后才会执行&#xff0c;比如RT-Thread的系统 kthread_run 是 Linux 内核中的…

人类与机器的分类不同

分类能力也是智能的重要标识之一。通过分类&#xff0c;我们可以将事物或概念进行归类和组织&#xff0c;从而更好地理解和处理信息。分类在人类认知和智能发展中起到了重要的作用&#xff0c;它有助于我们对世界进行认知、记忆、推理和决策。在机器智能领域&#xff0c;分类同…

企业服务器器中了360后缀勒索病毒怎么解决,勒索病毒解密数据恢复

随着网络威胁的增加&#xff0c;企业服务器成为黑客攻击的目标之一。近期&#xff0c;上海某知名律师事务所的数据库遭到了360后缀的勒索病毒攻击&#xff0c;导致企业服务器内的数据库被360后缀勒索病毒加密。许多重要的数据被锁定无法正常读取&#xff0c;严重影响了企业的正…

基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(2)----驱动STSPIN220

基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220----2.驱动STSPIN220 套件概述样品申请STSPIN220描述STSPIN220所有功能基础配置REF电流配置细分配置IO配置定时器配置初始化mode 套件概述 本文档的目标是提供关于使用STM32CubeMX驱动低压步进电机驱动器STSPIN220的详尽信息…

vue2中使用mock数据发送请求

1.安装 npm i mockjs1.1 2.准备json数据 说明&#xff1a;mock数据需要的图片放置到public文件夹中&#xff08;原封不动的打包到dist文件夹&#xff09; [{"id": "1","imgUrl": "/images/banner1.jpg"},{"id": "2&qu…

每天一道leetcode: 57.和为s的两个数字

今日份题目&#xff1a; 输入一个递增排序的数组和一个数字s&#xff0c;在数组中查找两个数&#xff0c;使得它们的和正好是s。如果有多对数字的和等于s&#xff0c;则输出任意一对即可。 示例1 输入&#xff1a;nums [2,7,11,15], target 9 输出&#xff1a;[2,7] 或者 …

一文带你快速了解【在树莓派上搭建web网站---并在外网可访问】

文章目录 概述使用 Raspberry Pi Imager 安装 Raspberry Pi OS测试 web 站点安装静态样例站点 将web站点发布到公网安装 Cpolarcpolar进行token认证生成cpolar随机域名网址生成cpolar二级子域名将参数保存到cpolar配置文件中测试修改后配置文件配置cpolar服务开机自启动 概述 …

Gson 添加数据默认值问题记录

问题&#xff1a;在用Gson add(key&#xff08;string类型&#xff09;&#xff0c;value&#xff08;必须是JsonElement子类&#xff09;&#xff09;时发现&#xff0c;value 传了 "" 空字符串&#xff08;非null&#xff09;&#xff0c;默认解析后返回null&#…

机器学习笔记 - 关于GPT-4的一些问题清单

一、简述 据报道,GPT-4 的系统由八个模型组成,每个模型都有 2200 亿个参数。GPT-4 的参数总数估计约为 1.76 万亿个。 近年来,得益于 GPT-4 等高级语言模型的发展,自然语言处理(NLP) 取得了长足的进步。凭借其前所未有的规模和能力,GPT-4为语言 AI​​设立了新标准,并为机…