vue子組件中使用window.onresize()只執(zhí)行一次問題
描述
做了個(gè)簡單的echarts組件,其中有個(gè)功能是當(dāng)窗口變化時(shí),刷新echarts。
用了window.onresize(),且用了防抖方法,但是一個(gè)頁面中會(huì)有多處用到echarts的組件,重點(diǎn)是當(dāng)將窗口拖拽時(shí),卻只執(zhí)行了一次。
window.onresize = () => {
delay(function () {
//防抖重畫
_this.handleDispose()
_this.handleDraw()
}, 500)
}解決方案
使用 window.addEventListener('resize',function(){})
window.addEventListener('resize', _this.handleReDraw)區(qū)別:
- window.addEventListener():為每個(gè)事件指定一個(gè)回調(diào)函數(shù)去處理,簡單說,以我這個(gè)組件為例,是為每個(gè)組件都指定了一個(gè)回調(diào)函數(shù)處理
- window.onresize():是統(tǒng)一用一個(gè)回調(diào)去去處理,簡單說,N個(gè)子組件都用了一個(gè)同一個(gè)函數(shù)去處理,所以,只能最后一個(gè)子組件好用,因?yàn)楹笳吒采w了前面的方法
tips:
- 根據(jù)你的業(yè)務(wù)邏輯,別忘了removeEventListener(),否則它會(huì)一直監(jiān)聽
- 如果你的是后臺(tái)管理系統(tǒng),且有多頁tabs功能(開多頁功能),那么你要監(jiān)聽下route并做好除去監(jiān)聽方法,否則它也會(huì)一直監(jiān)聽


watch: {
options (newVal, oldVal) {
let _this = this
if (newVal) {
_this.init()
}
},
$route: {
handler: function (route) {
const _this = this
if (route.name != "Index") {
//移除監(jiān)聽
window.removeEventListener('resize', _this.handleReDraw)
} else {
//監(jiān)聽窗口變化
window.addEventListener('resize', _this.handleReDraw)
}
},
immediate: true,
},
},
...
// 頁面初始化
created () { },
// 頁面DOM加載完成
mounted () {
let _this = this
_this.init()
//監(jiān)聽窗口變化
window.addEventListener('resize', _this.handleReDraw)
},
//離開頁面時(shí)執(zhí)行
destroyed () {
const _this = this
//移除監(jiān)聽
window.removeEventListener('resize', _this.handleReDraw)
},
...總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)本地存儲(chǔ)添加刪除修改功能
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)本地存儲(chǔ)添加刪除修改功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
nginx+vite項(xiàng)目打包以及部署的詳細(xì)過程
我們使用nginx部署Vue項(xiàng)目,實(shí)質(zhì)上就是將Vue項(xiàng)目打包后的內(nèi)容同步到nginx指向的文件夾,下面這篇文章主要給大家介紹了關(guān)于nginx+vite項(xiàng)目打包以及部署的相關(guān)資料,需要的朋友可以參考下2023-01-01
vue項(xiàng)目中定時(shí)器無法清除的原因解決
頁面有定時(shí)器,并且定時(shí)器在離開頁面時(shí),有清除,本文主要介紹了vue項(xiàng)目中定時(shí)器無法清除的原因解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02

