Vue组件文档属性无法动态渲染到页面怎么办?
我正在开发一个可复用的按钮组件,想通过props传递文档说明,但渲染时文档属性一直显示为空:
<template>
<div>
<h3>{{ title }}</h3>
<ul>
<li v-for="(prop, index) in documentation" :key="index">
{{ prop.name }} - {{ prop.type }}
</li>
</ul>
</div>
</template>
<script>
export default {
props: {
title: String,
documentation: Array
}
}
</script>
父组件这样传值:<my-component :title="'按钮文档'" :documentation="[{name:'size', type:'String'}]"></my-component>,但页面就是不显示属性列表,控制台也没报错。试过把v-for改成v-if就正常显示标题了,可能是循环哪里写错了?
Vue里对于Object和Array类型的props,必须用函数返回默认值,不能直接写默认值。规范要求是这样的:
你只写了
documentation: Array,没有default。当父组件传值过来时,Vue内部处理可能有问题,导致循环遍历失败但也不报错。改一下props定义,加上default就行:
另外,v-for的key不建议用index,prop.name本身就可以作为key,除非有重复的name。改成这样更规范:
基本上就是props定义缺默认值的问题,很常见的一个坑。
或者你也可以直接用组件接收的 props: