vue.js - 即使使用 set,Vue 也不会重新渲染列表
问题描述
我列出了每个项目都可以删除的列表,我的代码如下所示:
模板
<template v-for="(timeFrame, index) in form.timeFrames">
<el-form-item >
<el-button @click="removeTimeFrame(index)">
<i class="el-icon-remove"></i>
</el-button>
</el-form-item>
</template>
JS:
removeTimeFrame(index = 0) {
this.$set(this.form, 'timeFrames', this.form.timeFrames.filter((_, i) => index !== i));
}
不知何故,在我向列表中添加新项目之前,列表不会重新呈现。有人知道我的代码有什么问题吗?
解决方案
Vue 中的模板需要一个顶级元素来包装其内容,因此您不应将v-for
直接分配给模板标签,而应在模板标签div
内创建一个并添加v-for
到el-form-item
组件或将其包装在另一个div
标签中。
此外,循环中的每个元素都v-for
应该包含一个键。如果您不打算从循环中重新排序或删除元素,则index
每个元素的 -value 都可以。看到您的示例,我怀疑唯一标识符(例如随机生成的唯一 ID)可能更适合您的用例。
推荐阅读
- regex - 修复不跨记录的字段中的不平衡引号
- python - 100 门问题的实施问题
- docker - Docker 使用 docker-compose 让服务在后台运行(树莓派 4 上 docker 容器中的 neo4j)
- facebook-graph-api - Instagram 业务 API 速率限制
- magento2 - 基于会话变量的 Magento 2 目录价格规则
- python - 如何在python中发回结果并关闭套接字
- c - 如何在C中传输int变量地址?
- amazon-web-services - AWS CloudWatch Logs Insights 警报
- python - boto过滤器中的Python比较运算符
- sql - 用于从列中减去值并将其添加到同一行的 SQL 查询