国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

通過vue手動封裝on、emit、off的代碼詳解

2019-11-19 11:26:25
字體:
供稿:網(wǎng)友

一、概念

1. $on("事件名稱",回調(diào)函數(shù))

事件綁定,一個事件名稱上面可能綁定多個函數(shù)

2. $emit("事件名稱",需要傳遞的值)

事件觸發(fā)時,會觸發(fā)當(dāng)前事件身上所有的函數(shù)

3. $off("事件名稱",[需要解綁的函數(shù)])

事件解綁時,若指定解綁函數(shù)則只解綁相應(yīng)函數(shù),否則解綁全部

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

|  在vue中進(jìn)行非父子組件傳值時,我們可以通過在vue的原型上添加一個公共的vue實例,組件之間調(diào)用這個公共實例的$on/$emit來傳遞數(shù)據(jù),傳遞的一方調(diào)用$emit,接收的一方調(diào)用$on。

Vue.prototype.Observer = new Vue();  //實例化對象

|  這種方式能使所有對象擁有共同的on和emit,但是增加的屬性所掛載的實例對象太大,就相當(dāng)于你的一臺法拉利的輪子壞了,你又買了一臺新的法拉利并卸掉它的輪子,放到了原來的法拉利上,這十分耗費(fèi)性能。因此,我們可以手動封裝事件,來實現(xiàn)非父子傳值。

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

三、封裝on,emit,off事件

1. $on:創(chuàng)建一個事件倉庫存放事件,判斷事件名稱是否存在。若不存在,初始化創(chuàng)建一個數(shù)組;若存在,將當(dāng)前函數(shù)push到數(shù)組中。

const EventList = {}; //一個事件名稱上面可能綁定多個函數(shù),因此是一對多的模式,即觀察者模式,數(shù)據(jù)類型采用對象const on = function(eventName,callback){  if(!EventList[eventName]){    EventList[eventName] = [];  }  EventList[eventName].push(callback);}

2. $emit:判斷事件名稱是否存在。若不存在,直接返回return;若存在,對當(dāng)前事件名稱所對應(yīng)的所有函數(shù)進(jìn)行遍歷,并將參數(shù)傳遞過去。

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

3. $off:判斷事件名稱是否存在。若不存在,直接返回return;若存在,判斷callback是否存在,如果存在則刪除對應(yīng)下標(biāo)的的函數(shù),如果不存在則將當(dāng)前數(shù)組清空。

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. 導(dǎo)出:便于在其他文件中調(diào)用。

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

總結(jié)

以上所述是小編給大家介紹的通過vue手動封裝on、emit、off的代碼詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 建水县| 凤阳县| 林芝县| 乌鲁木齐县| 河津市| 乌兰浩特市| 雷山县| 清涧县| 诏安县| 乡城县| 阿克陶县| 永新县| 郸城县| 宁都县| 建瓯市| 平山县| 广宗县| 沅陵县| 溆浦县| 武义县| 镇坪县| 芮城县| 鹤壁市| 阿荣旗| 登封市| 剑川县| 读书| 大埔区| 黎平县| 望城县| 军事| 林周县| 濉溪县| 延长县| 尼木县| 广宗县| 克拉玛依市| 淮安市| 德安县| 浦城县| 望都县|