【发布时间】:2021-11-19 10:09:34
【问题描述】:
我正在尝试在我的 VueJS 应用程序中动态创建 sensorArray。为此,当我创建一个元素并删除它,然后当我尝试创建一个新元素时,我收到以下错误:
client.js:227 TypeError: Cannot read properties of undefined (reading 'value')
at eval (templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./pages/Test.vue?vue&type=template&id=cde3d4aa&:44)
at Proxy.renderList (vue.runtime.esm.js:2643)
以下是我拥有的简单 Vuejs 应用程序:
<template>
<div>
<span>Sensor Information : </span>
<button class="btn btn-info" @click="addSensorInfo($event)">
Add Sensor
</button>
<br>
<span v-if="sensorArray.length > 0"><b>Sensor Element: </b></span>
<span v-if="sensorArray.length > 0">
<div v-for="sensor in sensorArray" :key="sensor.ID" class="form-group">
<label class="form-label">Value</label>
<input v-model="sensorArray[sensor.ID].value" type="text" class="form-control">
<button class="btn btn-danger" @click="deleteSensorInfo($event,sensor.ID)"><i class="bi bi-trash" /></button>
</div>
</span>
</div>
</template>
<script>
export default {
data () {
return {
sensorID: 0,
sensorArray: []
}
},
methods: {
addSensorInfo (event) {
event.preventDefault()
const sensor = {}
sensor.ID = this.sensorID
this.sensorArray.push(sensor)
this.sensorID++
},
deleteSensorInfo (event, sensorID) {
event.preventDefault()
this.sensorArray.splice(this.sensorArray.filter(obj => obj.ID === sensorID), 1)
}
}
}
</script>
- 单击
Add Sensor按钮:将出现一个文本字段和删除按钮。 - 点击
Delete ICON并删除该字段。 - 现在再次点击
Add Sensor,然后出现以下错误:
client.js:227 TypeError: Cannot read properties of undefined (reading 'value')
由于我的SensorArray 中有很多元素,我没有创建专用元素并尝试根据用户点击动态创建所有内容。有人可以告诉我如何解决这个问题吗?
【问题讨论】:
-
您可以使用
.prevent修饰符,如下所示:vuejs.org/v2/api/#v-on 您也可能在这种情况下:vuejs.org/v2/guide/reactivity.html#For-Arrays 删除后您是否检查了您的 Vue 开发工具中的内容?跨度> -
@kissu 感谢您的回复。你的意思是
event.preventDefault()对吗?如果是这样,那么我已经在使用它并且仍然出现错误。你能给我一些建议吗? -
这里只推荐了一个小改进。它不会解决其他问题。你检查过你的 Vue 开发工具吗?删除后的当前状态是什么?
-
@kissu 在删除操作之后,我的
sensorArray变为sensorArray:Array[0]和sensorID:1,所以基本上在delete操作期间添加的元素已被删除。现在,当我尝试再次添加时,我得到了错误。 -
问题到底出在哪里?是
this.sensorID++还是this.sensorArray.push(sensor)?也许在这里试试this.sensorID += 1。否则,我想minimal reproducible example 在这里可能会有所帮助!
标签: javascript vue.js nuxt.js undefined typeerror