使用数组而不是对象
[Vue warn]: Invalid prop: type check failed for prop "options". Expected Array, got Object
这传达的信息很明确.您要传递的是对象而不是array.您应该传递一个array.
const objectFromApiResult = respTags.data // {tag1: {version: "1.2.3"}, tag2: {version: "1.2.4"}}
tags.value = Object.keys(objectFromApiResult).map((key) => ({
value: key,
label: objectFromApiResult[key].version
})) // [{label: "1.2.3", value: "tag1"}, {label: "1.2.4", value: "tag2"}]
对于Object.keys()
,我创建了一个包含对象键的array.然后,我使用.map
操作每个元素,并插入一个具有两个属性的对象,标签和值,而不是字符串类型的键名.
Object.keys()
- MDN Docs
Array.property.map()
- MDN Docs
Dropdown - props.options
- PrimeVue Docs (required, type array
)
An array of selectitems以显示为可用选项.
如何设置标签和值属性的名称
您可以指定数组中存在的对象中键变量和值变量的列名.标签的列名可以使用props.optionLabel
属性传递,相应的值可以使用props.optionValue
属性设置.
<Dropdown v-model="tag" :options="tags" optionLabel="name" optionValue="version" />
const objectFromApiResult = respTags.data // {tag1: {version: "1.2.3"}, tag2: {version: "1.2.4"}}
tags.value = Object.keys(objectFromApiResult).map((key) => ({
version: objectFromApiResult[key].version,
name: `Version: ${objectFromApiResult[key].version}, TagKey: ${key}`
})) // [{version: "1.2.3", name: "Version: 1.2.3, TagKey: tag1"}, {version: "1.2.4", name: "Version: 1.2.4, TagKey: tag2"}]
Dropdown - props.optionLabel
- PrimeVue Docs - (optional, type string
, default: label
)
Dropdown - props.optionValue
- PrimeVue Docs - (optional, type string
, default: value
)
从同一属性中提取标签和值
因此,标签和值也可以从单个属性中引用.
<Dropdown v-model="tag" :options="tags" optionLabel="version" optionValue="version" />
const objectFromApiResult = respTags.data // {tag1: {version: "1.2.3"}, tag2: {version: "1.2.4"}}
tags.value = Object.keys(objectFromApiResult).map((key) => ({
version: objectFromApiResult[key].version,
})) // [{version: "1.2.3"}, {version: "1.2.4"}]
如果我们只想将对象的值转换为数组
虽然在这种情况下,使用Object.values
函数比使用Object.keys
更合理.
<Dropdown v-model="tag" :options="tags" optionLabel="version" optionValue="version" />
const objectFromApiResult = respTags.data // {tag1: {version: "1.2.3"}, tag2: {version: "1.2.4"}}
tags.value = Object.values(objectFromApiResult) // [{version: "1.2.3"}, {version: "1.2.4"}]
Object.values()
-MDN文档