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

首頁 > 語言 > JavaScript > 正文

深入理解Vue.js源碼之事件機制

2024-05-06 15:26:09
字體:
來源:轉載
供稿:網友

寫在前面

因為對Vue.js很感興趣,而且平時工作的技術棧也是Vue.js,這幾個月花了些時間研究學習了一下Vue.js源碼,并做了總結與輸出。

文章的原地址:https://github.com/answershuto/learnVue。

在學習過程中,為Vue加上了中文的注釋https://github.com/answershuto/learnVue/tree/master/vue-src,希望可以對其他想學習Vue源碼的小伙伴有所幫助。
可能會有理解存在偏差的地方,歡迎提issue指出,共同學習,共同進步。

Vue事件API

眾所周知,Vue.js為我們提供了四個事件API,分別是$on](https://cn.vuejs.org/v2/api/#vm-on-event-callback),[$once,$off](https://cn.vuejs.org/v2/api/#vm-off-event-callback),[$emit。

初始化事件

初始化事件在vm上創建一個_events對象,用來存放事件。_events的內容如下:

{  eventName: [func1, func2, func3]}

存放事件名以及對應執行方法。

/*初始化事件*/export function initEvents (vm: Component) { /*在vm上創建一個_events對象,用來存放事件。*/ vm._events = Object.create(null) /*這個bool標志位來表明是否存在鉤子,而不需要通過哈希表的方法來查找是否有鉤子,這樣做可以減少不必要的開銷,優化性能。*/ vm._hasHookEvent = false // init parent attached events /*初始化父組件attach的事件*/ const listeners = vm.$options._parentListeners if (listeners) {  updateComponentListeners(vm, listeners) }}

$on

$on方法用來在vm實例上監聽一個自定義事件,該事件可用$emit觸發。

 Vue.prototype.$on = function (event: string | Array<string>, fn: Function): Component {  const vm: Component = this  /*如果是數組的時候,則遞歸$on,為每一個成員都綁定上方法*/  if (Array.isArray(event)) {   for (let i = 0, l = event.length; i < l; i++) {    this.$on(event[i], fn)   }  } else {   (vm._events[event] || (vm._events[event] = [])).push(fn)   // optimize hook:event cost by using a boolean flag marked at registration   // instead of a hash lookup   /*這里在注冊事件的時候標記bool值也就是個標志位來表明存在鉤子,而不需要通過哈希表的方法來查找是否有鉤子,這樣做可以減少不必要的開銷,優化性能。*/   if (hookRE.test(event)) {    vm._hasHookEvent = true   }  }  return vm }

$once

$once監聽一個只能觸發一次的事件,在觸發以后會自動移除該事件。

 Vue.prototype.$once = function (event: string, fn: Function): Component {  const vm: Component = this  function on () {   /*在第一次執行的時候將該事件銷毀*/   vm.$off(event, on)   /*執行注冊的方法*/   fn.apply(vm, arguments)  }  on.fn = fn  vm.$on(event, on)  return vm }

$off

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 敖汉旗| 江孜县| 衡东县| 凤台县| 广宁县| 包头市| 东辽县| 云梦县| 环江| 内黄县| 邢台县| 五常市| 华坪县| 通化县| 勐海县| 垣曲县| 民乐县| 浦北县| 乌鲁木齐市| 南漳县| 梅州市| 香港| 湟源县| 玉门市| 永吉县| 广德县| 民勤县| 西宁市| 衡南县| 张家港市| 鄂尔多斯市| 海南省| 汝南县| 连平县| 淳安县| 广南县| 河北省| 罗定市| 延津县| 莱芜市| 大港区|