博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Vue】---- 手动封装on,emit,off
阅读量:5156 次
发布时间:2019-06-13

本文共 1514 字,大约阅读时间需要 5 分钟。

一、概念

1. $on("事件名称",回调函数)

    事件绑定,一个事件名称上面可能绑定多个函数

2. $emit("事件名称",需要传递的值)

    事件触发时,会触发当前事件身上所有的函数

3. $off("事件名称",[需要解绑的函数]) 

    事件解绑时,若指定解绑函数则只解绑相应函数,否则解绑全部

 

二、手动封装on,emit,off事件在vue中的作用

|  在vue中进行非父子组件传值时,我们可以通过在vue的原型上添加一个公共的vue实例,组件之间调用这个公共实例的$on/$emit来传递数据,传递的一方调用$emit,接收的一方调用$on。

Vue.prototype.Observer = new Vue();  //实例化对象

|  这种方式能使所有对象拥有共同的on和emit,但是增加的属性所挂载的实例对象太大,就相当于你的一台法拉利的轮子坏了,你又买了一台新的法拉利并卸掉它的轮子,放到了原来的法拉利上,这十分耗费性能。因此,我们可以手动封装事件,来实现非父子传值。

import Observer from "./Observer";  //引入封装好的文件Vue.prototype.Observer = Observer;   //将其添加到vue的原型上
 

 

三、封装on,emit,off事件

  1. $on:创建一个事件仓库存放事件,判断事件名称是否存在。若不存在,初始化创建一个数组;若存在,将当前函数push到数组中。

const EventList = {};  //一个事件名称上面可能绑定多个函数,因此是一对多的模式,即观察者模式,数据类型采用对象const on = function(eventName,callback){    if(!EventList[eventName]){        EventList[eventName] = [];    }    EventList[eventName].push(callback);}

  2. $emit:判断事件名称是否存在。若不存在,直接返回return;若存在,对当前事件名称所对应的所有函数进行遍历,并将参数传递过去。

const emit = function(eventName,params){    if(!EventList[eventName])return;    EventList[eventName].map((cb)=>{        cb(params)    })}

  3. $off:判断事件名称是否存在。若不存在,直接返回return;若存在,判断callback是否存在,如果存在则删除对应下标的的函数,如果不存在则将当前数组清空。

const off = function(eventName,callback){    if(!EventList[eventName])return;    if(callback){        let index = EventList[eventName].indexOf(callback);        EventList[eventName].splice(index,1);    }else{        EventList[eventName] = [];    }}

  4. 导出:便于在其他文件中调用。

export default {    $on : on,    $emit : emit,    $off : off}

 

转载于:https://www.cnblogs.com/pinkpinkc/p/10941703.html

你可能感兴趣的文章
DIOCP 运作核心探密
查看>>
You are not late! You are not early!
查看>>
基于Flask框架的Python web程序的开发实战 <二> 项目组织结构
查看>>
Linux grep及正则表达式
查看>>
P2023 [AHOI2009]维护序列
查看>>
HDU2216:Game III(BFS)
查看>>
JQuery语法 JQuery对象与原生对象互转 文档就绪函数与window.onload的区别
查看>>
swift-01-利用元组判断字符串出现次数
查看>>
LOJ10155数字转换
查看>>
JQuery实现轮播图及其原理
查看>>
zoj 3540
查看>>
Leetcode475.Heaters供暖器
查看>>
霍夫变换(Hough Transform)
查看>>
tomcat 内存溢出问题
查看>>
C++ OI图论 学习笔记(初步完结)
查看>>
USACO Broken Necklace
查看>>
中小型网站生存之道
查看>>
如何获取repeater某行第一列的值
查看>>
结对编程之实战
查看>>
TTButton 的正确使用的方法
查看>>