我有一个使用 Vuetify 的数据表,它从 Rails 后端传递 localAuthority 属性。一切都运行得很好,直到我传递一个空的子关联(嵌套属性)。在本例中为“县”:
<script> import axios from "axios"; export default { name: 'LocalAuthorityIndex', props: { localAuthorities: {type: Array, default: () => []}, counties: {type: Array, default: () => []}, localAuthorityTypes: {type: Array, default: () => []} }, data() { return{ search: '', dialog: false, testmh: 'hello', dialogDelete: false, headers: [ { text: 'Name', align: 'start', value: 'name' }, { text: 'ONS Code', value: 'ons_code' }, { text: 'ID', value: 'id' }, { text: 'Population', value: 'population' }, { text: 'county', value: 'county.name' }, { text: 'Website', value: 'website' }, { text: 'Actions', value: 'actions', sortable: false }, ],
因此,在上面的示例中,只要所有记录都有县关联 (belongs_to),它就可以工作。但是,如果一条记录没有与之关联的“县”,则会收到以下错误:
[Vue warn]: Error in render: "TypeError: Cannot read properties of undefined (reading 'name')"
我尝试了很多方法,例如添加条件语句,如下所示:
{ text: 'county', value: ('county.name' ? 'county.name' : nil )},
但似乎没有任何效果。
根据 Codepen 上的
<v-data-table>
代码,我发现您正在用自己的代码覆盖默认的表项插槽。您的错误来自这部分代码:
看一下第一个字符串。
#item.county.name
是v-slot:item.county.name
的缩写形式,来自headers
数组中的字符串之一:所以没有错误,即使您的item不包含任何county,这部分也会被vuetify库正确解析。
错误出现在上述代码的第三个字符串中。您正在尝试打印county的名称而不检查其是否存在。这就是为什么您收到
...无法读取未定义的属性...
错误。我想你可以这样解决你的问题:
当然,如果您需要在这种情况下隐藏县链接,您也可以将
v-if
(或v-show
)添加到a
标签中。我还使用一些静态数据创建了一个小型Codepen。看看这个 Playground 中的 item.name.text 槽,也许它会帮助你理解类似的对象关联。