В следующем примере мы по нажатию на кнопку активируем и деактивируем применение стиля к элементу <div>.
<!-- index.html -->
<p>Просто строка для наглядности - чтобы на странице хоть что-то было.</p>
<div id="app">
<div v-bind:class="{ [myStyle]: isActive}">Сообщение, к которому должен примениться стиль.</div>
<button v-on:click="toggleStyle">Кнопка</button>
</div>
<script type="module" src="vue_example.js"></script>
/* main.css */
.kaka1 {
color: red;
}
// vue_example.js
import { createApp, ref } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
const kukuruza = createApp({
setup() {
const myStyle = "kaka1";
const isActive = ref(true);
function toggleStyle() {
isActive.value = !isActive.value;
}
return {
myStyle,
isActive,
toggleStyle
}
}
});
kukuruza.mount("#app");
Можно применять/отключать сразу несколько классов одновременно:
<!-- index.html -->
<p>Просто строка для наглядности - чтобы на странице хоть что-то было.</p>
<div id="app">
<!-- Присваиваем двум классам булевые переменные -->
<div v-bind:class="{ kaka1: kaka1IsActive, kaka3: kaka3IsActive }">Сообщение, к которому должен примениться стиль.</div>
</div>
<script type="module" src="vue_example.js"></script>
/* main.css */
.kaka1 {
color: red;
}
.kaka3 {
text-decoration: underline;
}
// vue_example.js
import { createApp } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
const kukuruza = createApp({
setup() {
// активируем два класса:
const kaka1IsActive = true;
const kaka3IsActive = true;
return {
kaka1IsActive,
kaka3IsActive
}
}
});
kukuruza.mount("#app");
Вышеприведённый пример можно переписать таким образом, чтобы мы экспортировали не каждую переменную, а сразу целый объект. И, давайте, сделаем его ещё реактивным.
<!-- index.html -->
<p>Просто строка для наглядности - чтобы на странице хоть что-то было.</p>
<div id="app">
<!-- Передаём классу уже созданный в JS реактивный объект -->
<div v-bind:class="classObject">Сообщение, к которому должен примениться стиль.</div>
</div>
<script type="module" src="vue_example.js"></script>
// vue_example.js
import { createApp, reactive } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
const kukuruza = createApp({
setup() {
const kaka1IsActive = true;
const kaka3IsActive = true;
// создаём реактивный объект и присваеваем классам булевые значения
const classObject = reactive({
kaka1: kaka1IsActive,
kaka3: kaka3IsActive
});
return {
classObject
}
}
});
kukuruza.mount("#app");
Такой же пример, но со свойством computed
<!-- index.html -->
<p>Просто строка для наглядности - чтобы на странице хоть что-то было.</p>
<div id="app">
<div v-bind:class="classObject">Сообщение, к которому должен примениться стиль.</div>
</div>
<script type="module" src="vue_example.js"></script>
//vue_example.js
import { createApp, ref, computed } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
const kukuruza = createApp({
setup() {
const error = ref(false);
const kaka1IsActive = ref(true);
const kaka3IsActive = ref(true);
const classObject = computed(() => ({
kaka1: kaka1IsActive.value && !error.value,
kaka3: kaka3IsActive.value
}));
return {
classObject
}
}
});
kukuruza.mount("#app");
kaka1 -> kaka2 -> выключаем классы
<!-- index.html -->
<p>Просто строка для наглядности - чтобы на странице хоть что-то было.</p>
<div id="app">
<div v-bind:class="currentClass">Сообщение, к которому должен примениться стиль.</div>
<button v-on:click="toggleStyle">Кнопка</button>
</div>
<script type="module" src="vue_example.js"></script>
/* main.css */
.kaka1 {
color: red;
}
.kaka2 {
color: blue;
}
// vue_example.js
import { createApp, ref } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
const kukuruza = createApp({
setup() {
const classes = ["kaka1", "kaka2", ""];
const index = ref(0);
const currentClass = ref(classes[index.value]);
function toggleStyle() {
// Если index.value > 2, то присваиваем index.value опять 0
index.value = (index.value + 1) % classes.length;
currentClass.value = classes[index.value];
}
return {
currentClass,
toggleStyle
}
}
});
kukuruza.mount("#app");