在自定义组件上使用 v-for,我可以访问组件内部的 ":key" 的值吗?

Posted

技术标签:

【中文标题】在自定义组件上使用 v-for,我可以访问组件内部的 ":key" 的值吗?【英文标题】:Using v-for on a custom component, can I access the value of ":key" inside of the component? 【发布时间】:2021-08-05 01:30:57 【问题描述】:

当使用 v-for 创建自定义组件列表时,我经常发现自己将item.id 绑定到我的:key :id 属性的值。我想知道是否(如果可以,如何)我可以访问key 的值,也许是作为我组件内部的道具。这将有效地为我省去在每个使用 v-for 指令的组件上创建 id 属性的麻烦。

<my-component v-for="item in items" :key="item.id" :id="item.id"></my-component>
// MyComponent.vue
props: ['key']

key 注册为道具并在应用程序中使用this.key 会产生undefined 的值。很明显,我不能简单地将key 引用为道具。

建议?

【问题讨论】:

您的密钥与item.id 相同,它被传递为id,为什么不访问它呢? 这个想法是我不必在我使用v-for 的每个组件中添加:id="this.id" 属性并绑定:key="item.id"。我需要使用keyv-for。密钥必须是唯一的。您几乎总是在您循环访问的对象上使用某种形式的id 属性来注册您的key。那么为什么我需要在使用 v-for 的每个组件中编写基本上完全相同的代码行两次呢? :key="item.id" :id="item.id" 太多余了。我相信有一种方法可以访问关键值。也许有一个道具keyValue vue 通过了? 这能回答你的问题吗? Access key from child component in vue @painotpi 不幸的是,没有。 “无法读取未定义的属性‘键’”。我认为它可能自 2017 年以来发生了变化。我使用的是 Vue3,我认为这一定是 Vue 或 Vue2 的答案。 是的,感谢您试一试!我会试试 Discord。我希望我找到了合适的——Vue Land?我试试看,那里。 【参考方案1】:

我一直在打听,看起来key 的值更多地用于 Vue 的虚拟 DOM,这使得它作为组件本身的数据属性的可用性大大降低。因为虚拟 DOM 可以更改,所以 key 的值可能会更改为与数据的预期 id 属性不同步,如果 Vue 发现这样做很有效的话。这使得使用它来引用数据中特定对象的id 不可靠。

如果其他人有更好的解释,请分享。

【讨论】:

以上是关于在自定义组件上使用 v-for,我可以访问组件内部的 ":key" 的值吗?的主要内容,如果未能解决你的问题,请参考以下文章

Vue3Cli-列表渲染(v-for使用)

在自定义 Angular 组件中访问 FormControl

如何在自定义模块(Joomla 1.7)中使用自定义组件中的函数?

v-for

如何在自定义组件上启用 v-model?

在自定义 Delphi 组件中实现 Columns.Columns 属性