У меня есть компонент Vue, который отображает список элементов. Я могу пометить любой элемент как «активный» (логическое значение). Это значение сохраняется в базе данных.
Например, у меня может быть всего пять предметов. Три из них могут быть помечены как «активные», остальные два - нет.
Когда моя страница загружается, активные / не активные данные поступают с моего контроллера, и я передаю данные в свой компонент vue как свойство,Свойство имеет атрибут active
, который может быть включен / выключен. Это значение хранится в базе данных как логическое значение.
Вот так выглядит мой компонент:
<template>
<div class="item" :class="{'active' : isActive}" @click="handleClick($event, item)">
<div v-if="item.icon" class="item-icon">
<i :class="item.icon"></i>
</div>
<div class="item-title">
{{ item.title }}
</div>
</div>
</template>
<script>
export default {
name: 'Item',
data() {
return {
isActive: false,
}
},
methods: {
async handleClick(event, item) {
try {
let response = await axios.patch(`/path/${item.id}`, {
title: item.title,
active: !this.isActive,
});
if (response.status === 200) {
this.isActive = !this.isActive;
console.log('isActive: ', this.isActive);
} else {
console.error('Error: could not update item. ', response);
}
} catch (error) {
console.error('Error: sending patch request. ', error);
}
},
},
props: {
item: {
type: Object,
required: true,
},
},
}
</script>
В целом, система работает. Мои запросы обрабатываются правильно, а данные обновляются корректно.
Если я изменю свой шаблон следующим образом:
<div class="item" :class="{'active' : isActive}"
@click="handleItemClick($event, item)">
Я вижу, что обновление класса / пользовательского интерфейса корректно. Но, поскольку исходные данные поступают из Laravel (контроллера), мне нужно иметь два класса.
Так или иначе, я не связываюсь с классами правильно, поэтому, когда я нажимаю, пользовательский интерфейс обновляется правильно.
РЕДАКТИРОВАТЬ
Спасиботак много для ваших предложений. Я обновил логику компонентов, чтобы отразить, что работает правильно. Когда все рушится, это когда я изменяю шаблон на учетную запись, если элемент уже активен:
<div class="item" :class="{'active' : isActive, 'active': item.active}"
@click="handleClick($event, item)">
Логика все еще работает (когда я обновляю страницу), но пользовательский интерфейс не обновляется динамически.