vue.js - 如何“动态地”将 veux getter 作为道具传递给我的子组件?
问题描述
我正在尝试将数组动态传递到我的组件的道具中。问题是这个数组是由 getter 获取的。原因是我从商店中获取了多个列表,并希望使用循环将它们传递下去。
Parent.vue
(见行:2)
<v-tab-item v-for="item in tabItems" :key="item.list">
<searchCard :items="item.list">
<template v-slot:content="prop">
<v-card-title class="text-capitalize">{{ prop.item.name }}</v-card-title>
<v-card-text>
<p>Rate: {{ prop.item.rate }}/{{ prop.item.unit }}</p>
<p>Quantity: {{ prop.item.quantity }}</p>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<plusMinusGroup>
<p slot="value">{{ prop.item.quantity || 0 }}</p>
</plusMinusGroup>
</v-card-actions>
</template>
</searchCard>
</v-tab-item>
这就是我的tabItems
数组和映射的 getter 的样子
tabItems: [
{ list: 'prodList', cardHeight: 20 },
{ list: 'materialList', cardHeight: 20 },
{ list: 'itemList', cardHeight: 20 },
],
...mapGetters({
prodList: 'products/productList',
materialList: 'materials/materialList',
itemList: 'items/itemList',
}),
问题是该值被截获为字符串文字(这是有道理的),我无法让它工作。
我尝试过替换{ list: "prodList", cardHeight: 20 },
,{ list: this.prodList, cardHeight: 20 },
但这无济于事。
另外,因为我的 Vuex 被拆分成多个模块,所以我不能使用提供的字符串来获取子模块内的 getter。
解决方案
这里的主要困难是没有$computed
等价于$data
. 如果有这将很容易。
一种选择是this
在模板中添加一个显式:
<searchCard :items="this[item.list]">
如果你正在运行一个 linter,它可能会抱怨这一点。
该实例在属性中确实有对其自身的引用_self
。下划线表示它是私有的,所以我们不应该真正使用它。理论上,您可以创建自己的别名:
data () {
return {
self: this
}
}
然后:
<searchCard :items="self[item.list]">
不过似乎有点hacky。
有一些使用属性获取器的技巧会起作用,但我认为这只会使事情复杂化。例如,在代理到相关列表的每个选项卡项上放置一个吸气剂。
最简单的方法可能是提供一种方法:
methods: {
getList (listName) {
return this[listName]
}
}
和:
<searchCard :items="getList(item.list)">
对我来说,这似乎最不可能给未来的代码维护者造成混淆。
推荐阅读
- terraform - 发生崩溃时 remote-exec 脚本位于何处?
- reactjs - Auth0 重定向到错误的地址
- ios - 照片选择器错误 - 使用时与插件的连接中断
- javascript - 在 html 中使用单选按钮添加价格
- javascript - 为什么我需要两次点击两次才能触发onclick事件 - tictactoe
- c# - Xamarin.Forms:在 C# 中绑定到整个 BindingConext(不是 XAML)
- javascript - 如何使下拉菜单恰好出现在 Material-UI 中的栏下方?
- api - 空手道:是否可以从场景大纲中匹配 json
- python - 如何清理 matplotlib 中的 x 轴值?
- python - 如何将列中的所有值从数千转换为数十亿?使用熊猫