vue3+ts+element-plus中使用el-popover,template #reference中无法加载多个的组件问题,如下代码:
<el-popover
trigger="click" width="800"
>
<template #reference>
{{c.name + '('+ c.children.length +')'}}
<el-icon v-if="c.action"><ArrowUp /></el-icon>
<el-icon v-else><ArrowDown /></el-icon>
</template>
<div>
<ul>
<li v-for="(c1,index1) in citysChildren" :class="{checked:c1.action}" @click="changeListChildren(index1)" :key="c1.name" style="width: 140px;white-space: nowrap;">
{{ c1.name }}
</li>
</ul>
</div>
</el-popover>
这样的发现icon无法加载出来,但是c.name可以加载出来。如图:
换了img和svg直接贴入,发现还是无法加载出来。
解决方案:
template #reference 是会加载第一个组件的,底层源码不知道,但是如果把{{ c.name }} 与 icon代码互换,你就会发现加载了icon,c.name则没有被加载。所以我们可以用一个span包裹已解决问题。
代码:
<el-popover
trigger="click" width="800"
>
<template #reference>
<span>
{{c.name + '('+ c.children.length +')'}}
<el-icon v-if="c.action"><ArrowUp /></el-icon>
<el-icon v-else><ArrowDown /></el-icon>
</span>
</template>
<div>
<ul>
<li v-for="(c1,index1) in citysChildren" :class="{checked:c1.action}" @click="changeListChildren(index1)" :key="c1.name" style="width: 140px;white-space: nowrap;">
{{ c1.name }}
</li>
</ul>
</div>
</el-popover>
这样就可以加载出多个组件了。其原理我没有深入了解。往各位自行深入了解。
效果图: