vuejs2 - 我应该担心由于不删除事件处理程序而导致的内存泄漏吗?
问题描述
我最近不得不将事件处理程序添加到vuetify
对话框的叠加层并且它可以工作。
打开/关闭对话框由一个布尔变量控制dialog
:
<v-dialog v-model="dialog">
<MyComponent v-if="dialog" />
</v-dialog>
以及一些添加/删除处理程序的代码:
openDialog() {
this.dialog = true
setTimeout(() => {
const overlay = document.querySelector('.v-overlay--active .v-overlay__scrim')
if (overlay) {
overlay.addEventListener('my-event', this.myEventHandler)
}
}, 100)
},
closeDialog() {
const overlay = document.querySelector('.v-overlay--active .v-overlay__scrim')
if (overlay) {
overlay.removeEventListener('my-event', this.myEventHandler)
}
this.dialog = false
},
我担心的是,closeDialog
并不总是被调用(例如在对话框外单击时),在这种情况下我是否需要担心内存泄漏?
对话框覆盖似乎被vuetify
库插入/删除,我不确定这些更改是否会造成麻烦。
解决方案
我的问题非常vuetify
具体。我不知道click:outside
可用于的事件的存在v-dialog
。此外,我必须使对话框持久化并处理 keyup 事件esc
以关闭对话框:
// @keyup.esc="handleEsc" somewhere close to top
<v-dialog v-model="dialog" persistent @click:outside="closeDialog">
<MyComponent v-if="dialog" />
</v-dialog>
所以现在我明确地处理所有事件以关闭对话框并确信无需担心内存泄漏。
推荐阅读
- r - 从字符串中提取多个路径
- javascript - 原始数据方法
- javascript - 您可以创建动态 Firebase 查询吗?
- windows - 如何修复 Windows 驱动程序 StartService 错误 1275
- function - SOLR 使用 CONCAT 函数查询从字段中丢失一些单词 - 如何使其处理所有单词?
- python - /rosetta/ 的 NoReverseMatch。找不到“罗塞塔文件列表”的反向
- c# - C# MySQL事务重复条目异常
- java - 为什么循环变量不重复,因为它们在循环中被多次贴花?
- python - 循环后在python中创建一个适当的DataFrame
- rust - lazy_static 全局字符串不会打印