Vuejs:渲染时出错:“TypeError:无法读取 null 的属性‘3’”
2020-07-13
4076
我正在尝试创建一个表单,以便可以在数据库中输入和更新值,但我总是收到警告,并且不知道如何摆脱它。我有一个包含具有 id 值的对象数组,例如:
data = [{id_a: 2, id_b: 3},{id_a: 5, id_b: 10}, ...]
在相关组件的模板中,我循环遍历此数组,并为每个对象在表中创建一行:
<template>
<div>
<table>
<tr
v-for="(dataset, i) in data"
:key="i"
>
<td>{{ a_selection[dataset.id_a] }}</td>
<td>{{ b_selection[dataset.id_b] }}</td>
</tr>
</table>
</div>
</template>
因为我不想显示 id 值,而是显示与它们关联的名称,所以我从两个对象中获取名称,这里称为 a_selection 和 b_selection。
我在创建钩子期间从服务器的脚本部分获取这些对象,如下所示:
<script>
import axios
export default {
created() {
axios.get(http://127.0.0.1:5000/get_a/").then(response => (this.a_selection= response.data));
axios.get(http://127.0.0.1:5000/get_b/").then(response => (this.b_selection= response.data));
},
data() {
return {
a_selection: null,
b_selection: null,
data: [{id_a: 2, id_b: 3},{id_a: 5, id_b: 10}]
}
}
};
</script>
当我尝试绘制它时,我收到 vue 警告:
[Vue warn]: Error in render: "TypeError: Cannot read property '2' of null"
和类型错误:
TypeError: Cannot read property '2' of null
出于某种原因,这样做会引发我一些错误,但最终,正确显示所需的表格。 有人能帮我理解这里发生了什么吗?
1个回答
因此,第一次尝试呈现仍然不存在的
a_selection[2]
-
添加名为
loading
的新数据,您可以先将其设置为 false -
在
created()
函数中,在发送任何请求之前,您可以将 loading 设置为 truethis.loading = true
- 一旦您成功从后端获取所有数据,您就可以再次将 loading 重新设置为 false
-
并且您可以使用
v-if
在加载时加载加载器,将其设置为 true,并在加载数据时使用v-else
呈现表格。 -
您可以使用任何其他类似的数据(已加载、已提取……)以便能够使用
v-if
和v-else
正确呈现数据。
Sgh
2020-07-13