是否可以在 Vue 中删除 prefers-color-scheme 事件侦听器?
Is it possible to remove a prefers-color-scheme event listener in Vue?
我尝试做一些非常简单的事情,但不知何故它不起作用。当一个组件被删除时,我想删除 evenListener,但不知何故这不起作用。有人能指出我正确的方向吗?
这是我的组件的简化版本:
<template>
<child-component :dark="darkModeEnabled" />
</template>
<script>
export default {
data () {
return {
darkModeEnabled: window.matchMedia('(prefers-color-scheme: dark)').matches
}
},
mounted () {
this.$nextTick(() => {
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', this.setDarkMode)
})
},
beforeDestroy () {
window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', this.setDarkMode)
},
methods: {
setDarkMode ({ matches }) {
this.darkModeEnabled = matches
}
}
}
</script>```
您的代码无法正常工作,因为您在不同的 MediaQueryList
对象中添加和删除。
...
mounted () {
this.mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)')
this.$nextTick(() => {
this.mediaQueryList.addEventListener('change', this.setDarkMode)
})
},
beforeDestroy () {
this.mediaQueryList.removeEventListener('change', this.setDarkMode)
}
...
我尝试做一些非常简单的事情,但不知何故它不起作用。当一个组件被删除时,我想删除 evenListener,但不知何故这不起作用。有人能指出我正确的方向吗?
这是我的组件的简化版本:
<template>
<child-component :dark="darkModeEnabled" />
</template>
<script>
export default {
data () {
return {
darkModeEnabled: window.matchMedia('(prefers-color-scheme: dark)').matches
}
},
mounted () {
this.$nextTick(() => {
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', this.setDarkMode)
})
},
beforeDestroy () {
window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', this.setDarkMode)
},
methods: {
setDarkMode ({ matches }) {
this.darkModeEnabled = matches
}
}
}
</script>```
您的代码无法正常工作,因为您在不同的 MediaQueryList
对象中添加和删除。
...
mounted () {
this.mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)')
this.$nextTick(() => {
this.mediaQueryList.addEventListener('change', this.setDarkMode)
})
},
beforeDestroy () {
this.mediaQueryList.removeEventListener('change', this.setDarkMode)
}
...