I try to do something very simple, but somehow it doesn't work. When a component gets remove I want to remove the evenListener, but somehow this doesn't work. Could anybody point me in the right direction?
Here is a simplified version of my component:
<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>```
Your code is not working because you are adding and removing in different
MediaQueryList
objects.JSFiddle