开发者问题收集

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 设置为 true this.loading = true
  • 一旦您成功从后端获取所有数据,您就可以再次将 loading 重新设置为 false
  • 并且您可以使用 v-if 在加载时加载加载器,将其设置为 true,并在加载数据时使用 v-else 呈现表格。
  • 您可以使用任何其他类似的数据(已加载、已提取……)以便能够使用 v-ifv-else 正确呈现数据。
Sgh
2020-07-13