Heim > Fragen und Antworten > Hauptteil
Ich habe eine Datentabelle mit Vuetify, die die Eigenschaft localAuthority von einem Rails-Backend übergibt. Alles funktioniert einwandfrei, bis ich eine leere untergeordnete Zuordnung (verschachteltes Attribut) übergebe. In diesem Fall „Landkreis“:
<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 }, ],
Im obigen Beispiel funktioniert es also, solange alle Datensätze Kreiszugehörigkeiten haben (belongs_to). Wenn einem Datensatz jedoch kein „Landkreis“ zugeordnet ist, erhalten Sie die folgende Fehlermeldung:
[Vue warn]: Error in render: "TypeError: Cannot read properties of undefined (reading 'name')"
Ich habe viele Möglichkeiten ausprobiert, zum Beispiel das Hinzufügen von bedingten Anweisungen wie dieser:
{ text: 'county', value: ('county.name' ? 'county.name' : nil )},
Aber nichts scheint zu funktionieren.
P粉4594409912024-03-28 12:15:48
根据 Codepen 上的 <v-data-table>
代码,我发现您正在用自己的代码覆盖默认的表项插槽。
您的错误来自这部分代码:
... {{ item.county.name }} ...
看一下第一个字符串。 #item.county.name
是 v-slot:item.county.name
的缩写形式,来自 headers
数组中的字符串之一:
... { text: 'county', value: 'county.name' },
所以没有错误,即使您的item不包含任何county,这部分也会被vuetify库正确解析。
错误出现在上述代码的第三个字符串中。您正在尝试打印county的名称而不检查其是否存在。这就是为什么您收到 ...无法读取未定义的属性...
错误。
我想你可以这样解决你的问题:
{{ item.county ? item.county.name : 'No name' }}
当然,如果您需要在这种情况下隐藏县链接,您也可以将 v-if
(或 v-show
)添加到 a
标签中。
我还使用一些静态数据创建了一个小型Codepen。看看这个 Playground 中的 item.name.text 槽,也许它会帮助你理解类似的对象关联。