1.今天在处理一个子组件显隐的问题的时候,之前使用template进行了一个v-if 的一个判断,这个时候是正常的可以显示子组件的东西的。但是当我不需要v-if直接用template包裹的时候。子组件的数据神奇般的不能显示了。于是我就翻阅资料。终于知道怎么回事了。
// 正常显示
<template v-if = 'xxx'>
<tabYear></tabYear>
</template>
// 不显示
<template>
<tabYear></tabYear>
</template>
问题所在: 在 Vue 中,template标签是一个特殊的包装器,它不会渲染到最终的 DOM 中。当你把 TabYear 组件包裹在 template 标签中时,实际上是在告诉 Vue 这个组件应该被当作一个模板片段来处理,而不是直接渲染。
所以:
- 直接使用 TabYear :reportList="reportList" 时,组件会正常渲染,即使 reportList 为空
- 当用 template 包裹时,Vue 会把这个组件当作模板处理,而不是直接渲染,导致界面显示不出来
正确的做法:
- 如果你需要条件渲染,应该使用 v-if 或 v-show 指令
- 如果你需要循环渲染,应该使用 v-for 指令
- 如果你只是要渲染单个组件,直接使用组件标签即可,不需要用 template 包裹