最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過vue手動(dòng)封裝on、emit、off的代碼詳解

 更新時(shí)間:2019年05月29日 10:09:11   作者:pinkpinkc  
這篇文章主要介紹了通過vue手動(dòng)封裝on,emit,off的代碼詳解,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、概念

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

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

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

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

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

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

二、手動(dòng)封裝on,emit,off事件在vue中的作用

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

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

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

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

三、封裝on,emit,off事件

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

const EventList = {}; //一個(gè)事件名稱上面可能綁定多個(gè)函數(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手動(dòng)封裝on、emit、off的代碼詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

最新評論

安新县| 平罗县| 从江县| 海淀区| 沙河市| 青岛市| 淮滨县| 永泰县| 甘德县| 威海市| 莎车县| 泰和县| 芮城县| 谷城县| 泾川县| 宜兰县| 通州区| 惠水县| 天峻县| 万载县| 凌云县| 天峨县| 遂平县| 唐河县| 舞钢市| 繁昌县| 龙南县| 朔州市| 玛多县| 宣城市| 庄河市| 天长市| 航空| 桦川县| 湘潭市| 东山县| 扎鲁特旗| 桐乡市| 唐山市| 广安市| 盖州市|