【发布时间】:2020-02-13 18:05:54
【问题描述】:
我有一个显示项目列表的 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)">
我看到类/ui 更新正确。但是,因为初始数据来自 Laravel(控制器),所以我需要这两个类。
所以不知何故,我没有正确绑定到类,所以当我点击时,ui 会正确更新。
编辑
非常感谢您的建议。我更新了我的组件逻辑以反映正常工作的内容。当事情崩溃时,我更改模板以说明项目是否已处于活动状态:
<div class="item" :class="{'active' : isActive, 'active': item.active}"
@click="handleClick($event, item)">
逻辑仍然有效(当我刷新页面时),但 UI 不会动态更新。
【问题讨论】:
-
:class="{ active: isActive || item.active }"也许?
标签: laravel vue.js vuejs2 vue-component laravel-6