Vue程序化的事件監(jiān)聽器(實(shí)例方案詳解)
某些第三方插件必須在當(dāng)前組件卸載后清除該實(shí)例(比如說百度的富文本框UEditor 如果不清除再次在下個(gè)組件使用時(shí)會(huì)有bug, 類似于小程序的語音實(shí)例,必須離開頁(yè)面的時(shí)候銷毀當(dāng)前語音實(shí)例,不然語音會(huì)一直播放)
方案1:
data() {
return {
timer: null // 定時(shí)器名稱
}
},
然后這樣使用定時(shí)器:
this.timer = setIterval (() => {
// 某些操作
}, 1000
最后在beforeDestroy()生命周期內(nèi)清除定時(shí)器:
beforeDestroy() {
clearInterval(this.timer);
this.timer = null;
}
這次方案有兩點(diǎn)不好的地方,引用尤大的話來說就是:
(1)它需要在這個(gè)組件實(shí)例中保存這個(gè)數(shù)據(jù)timer,這是多余的。
(2)我們的建立定時(shí)器代碼獨(dú)立于我們的清理代碼(定時(shí)器需要卸載頁(yè)面的時(shí)候卸載),這使得我們比較難于程序化的清理我們建立的所有東西(意思是執(zhí)行代碼和清除代碼不在一起)。
方案2: 該方法是通過$once這個(gè)事件偵聽器器在定義完定時(shí)器之后的位置來清除定時(shí)器。以下是完整代碼:
mounted: function () {
const timer = setInterval(() =>{
// 某些定時(shí)器操作
}, 500);
// 通過$once來監(jiān)聽定時(shí)器,在beforeDestroy鉤子可以被清除。
this.$once('hook:beforeDestroy', () => {
clearInterval(timer);
})
}
簡(jiǎn)單來說就是把所有創(chuàng)建實(shí)例和需要銷毀的實(shí)例代碼放在一起了,放在一起而已(創(chuàng)建實(shí)例和銷毀實(shí)例)……..
甚至可以在一個(gè)頁(yè)面開啟多個(gè)這種創(chuàng)建實(shí)例和銷毀實(shí)例
mounted: function () {
this.attachDatepicker('startDateInput')
this.attachDatepicker('endDateInput')
},
methods: {
attachDatepicker: function (refName) {
var picker = new Pikaday({
field: this.$refs[refName],
format: 'YYYY-MM-DD'
})
this.$once('hook:beforeDestroy', function () {
picker.destroy()
})
}
}
綜合來說,我們更推薦使用方案2,使得代碼可讀性更強(qiáng),一目了然。如果不清楚 $once、$on、$off 的使用。
總結(jié)
以上所述是小編給大家介紹的Vue程序化的事件監(jiān)聽器,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)我們網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
上一篇:js實(shí)現(xiàn)移動(dòng)端吸頂效果
欄 目:JavaScript
本文標(biāo)題:Vue程序化的事件監(jiān)聽器(實(shí)例方案詳解)
本文地址:http://www.jygsgssxh.com/a1/JavaScript/9264.html
您可能感興趣的文章
- 04-02javascript潛力,javascript強(qiáng)大嗎
- 04-02javascript點(diǎn)線,點(diǎn)線的代碼
- 04-02javascript替換字符串,js字符串的替換
- 04-02包含javascript舍的詞條
- 04-02javascript前身,javascript的前身
- 04-02java吃豆人代碼 js吃豆人
- 04-02java代碼的文件格式 java代碼的文件格式怎么寫
- 01-10使用webpack/gulp構(gòu)建TypeScript項(xiàng)目的方法示例
- 01-10使用JS來動(dòng)態(tài)操作css的幾種方法
- 01-10在Vue項(xiàng)目中使用Typescript的實(shí)現(xiàn)


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02javascript點(diǎn)線,點(diǎn)線的代碼
- 04-02javascript潛力,javascript強(qiáng)大嗎
- 04-02javascript替換字符串,js字符串的替換
- 04-02javascript移出,js 移入移出
- 04-02包含javascript舍的詞條
- 04-02javascript并行,深入理解并行編程 豆瓣
- 04-02javascript匿名,js匿名方法
- 04-02javascript警報(bào),JavaScript警告
- 04-02javascript遮蓋,JavaScript遮蓋PC端頁(yè)面
- 04-02javascript前身,javascript的前身
隨機(jī)閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文


