vue.js - 如何在计算值更改时刷新它
问题描述
当我单击切换时,我想更改:class =“ theme - $ {nightMode}
”的值,但它仅在我刷新页面时才有效,我无法弄清楚如何设置观察者以便'他查看值修改
``` <template>
<div id="app" :class="`theme-${nightMode}`">
<router-view />
<Header />
<Footer />
</div>
</template>
<script>
import Header from '@/components/molecules/Header/index.vue';
import Footer from '@/components/molecules/Footer/index.vue';
export default {
name: 'App',
components: { Header, Footer },
data() {
return {
themeMode: ''
};
},
computed: {
nightMode() {
const mode = localStorage.getItem('DarkMode');
if (mode === 'true') {
console.log('dark');
return 'dark';
} else {
console.log('light');
return 'light';
}
}
},
watch: {
themeMode(newVal) {
this.nightMode = newVal;
}
}
};
</script>
<style lang="scss" src="./assets/scss/style.scss"></style>```
解决方案
以下是改动
<template>
<div id="app" :class="`theme-${themeMode}`">
<router-view />
<Header />
<Footer />
</div>
</template>
<script>
import { mapGetters } from 'vuex'; // change Added
import Header from '@/components/molecules/Header/index.vue';
import Footer from '@/components/molecules/Footer/index.vue';
export default {
name: 'App',
components: { Header, Footer },
data() {
return {
themeMode: 'light' // change Added
};
},
computed: {
...mapGetters(['isDark']) // change Added
},
watch: { // change Added
isDark(newVal) {
this.themeMode = newVal ? 'dark' : 'light';
}
},
mounted() {
const mode = localStorage.getItem('DarkMode');
if (mode === 'true') {
console.log('dark');
return 'dark';
} else {
console.log('light');
return 'light';
}
}
};
</script>
<style lang="scss" src="./assets/scss/style.scss"></style>
```
推荐阅读
- json - 将 JSON 解组为结构,同时支持属性值的不同类型
- amazon-ec2 - 无法在 EC2 实例上运行 ejabberd
- php - 带有 oop 验证的 SQL 插入
- java - 使用 map reduce 的行数
- angular - 角度可观察返回对象 Object
- powershell - 基于另一个 cmdlet 进度状态的写入进度
- python - 用于管理员的 Django 反向内联
- javascript - 如何结合 Vuetify 数据表和 Vuetify 列表?
- sql - 将另一个变量粘贴到我在 R 中的 SQL 查询中
- sql-server - 无法导出具有重复列的 SQL Server 大型联接查询