重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
今天小編給大家分享一下Angular變更檢測中的訂閱異步事件怎么實(shí)現(xiàn)的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
十余年的邵武網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整邵武建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“邵武網(wǎng)站設(shè)計(jì)”,“邵武網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
只要發(fā)生了異步操作,Angular就后進(jìn)行變更檢測,那么Angular是如何訂閱(感知)到異步事件的呢?也就是說,當(dāng)異步事件執(zhí)行的時(shí)候,Angular是怎么知道的呢?先來了解一下zone.js。
zone.js 提供了一種稱為zone的機(jī)制,用于封裝和攔截瀏覽器中的異步任務(wù),還提供了異步生命周期鉤子和統(tǒng)一的異步錯(cuò)誤處理機(jī)制。
zone.js是通過打補(bǔ)丁的方式來對瀏覽器中常見方法和元素進(jìn)行攔截,比如setTimeout和HTMLElement.prototype.onclick。Angular在啟動時(shí)會利用zone.js修補(bǔ)幾個(gè)瀏覽器API,從而去實(shí)現(xiàn)異步事件的捕獲,并在捕獲事件后調(diào)用變更檢測。
package.json如下示例:
{
"dependencies": {
...
"zone.js": "~0.10.2"
}
}
可以簡單來看一下zone.js。
比如,在Vue2中的數(shù)據(jù)響應(yīng)式,我們都知道它是使用了Object.defineProperty來實(shí)現(xiàn)數(shù)據(jù)變化的攔截,但是它存在很多問題,它只可以監(jiān)聽對象的屬性變化,但是對于數(shù)組的變化時(shí)無能為力的。數(shù)組原型中有7個(gè)方法可以引起數(shù)組的變化,對于這些方法Vue都需要感知到他們,那怎么實(shí)現(xiàn)呢?拿push方法作為例子,需要把原始的push方法覆蓋掉,實(shí)現(xiàn)一個(gè)新的push,新的push方法要保留原始push方法的功能,還要通知依賴進(jìn)行更新。
zone.js中的實(shí)現(xiàn)和這個(gè)思路是一樣的,來看一段簡化的代碼模擬一下setTimeout的補(bǔ)丁過程:
function setTimeoutPatch() {
// 存儲原始的setTimeout
var originSetTimeout = window['setTimeout'];
// 對瀏覽器原生方法的包裹封裝
window.setTimeout = function () {
return global['zone']['setTimeout'].apply(global.zone, arguments);
};
// 創(chuàng)建包裹方法,提供給上面重寫后的setTimeout使用
Zone.prototype['setTimeout'] = function (fn, delay) {
// 先調(diào)用原始方法
originSetTimeout.apply(window, arguments);
// 執(zhí)行完原始方法后就可以做其他攔截后需要進(jìn)行的操作了
...
};
}
以上就是“Angular變更檢測中的訂閱異步事件怎么實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。