Использование шины событий
Вы можете использовать привязку класса , чтобы связать класс CSS со свойством, управляемым обработчиком события.
// MyComponent.vue
<template>
<div class="daynightdemo" :class="{ night: isNight }">
...
</div>
</template>
<script>
import { eventBus } from '@/eventBus'
export default {
data() {
return {
isNight: false
};
},
mounted() {
this.setNightDay = value => {
this.isNight = value === "night";
};
eventBus.$on("nightDay", this.setNightDay);
},
beforeDestroy() {
eventBus.$off("nightDay", this.setNightDay);
}
}
</script>
Вы упомянулишина событий периодически вызывается с setInterval
.В этом примере вызов будет выглядеть примерно так:
// App.vue
export default {
mounted() {
let isNight = true;
setInterval(() => {
eventBus.$emit("nightDay", isNight ? "night" : "day");
isNight = !isNight;
}, LONG_INTERVAL);
}
};
демо с шиной событий
Использование Vuex
Использование Vuex , шаблон будет несколько упрощен, устраняя необходимость регистрации и отмены регистрации обратного вызова:
// MyComponent.vue
<template>
<div class="daynightdemo" :class="{ night: $store.state.isNight }">
<h1>isNight: {{ $store.state.isNight }}</h1>
</div>
</template>
// App.vue
export default {
mounted() {
setInterval(() => {
this.$store.state.isNight = !this.$store.state.isNight;
}, 2000);
}
}
демо с Vuex