求助一个关于Vue 插槽的问题?
项目内部封装一个通用组件,组件内部有很多插槽,我现在基于这个通用组件增加功能在封装了一层,但是这时候发现slot失效了,
经过多次调试发现,并不是slot失效了,是“通用组件”内部 在使用具名插槽的地方加了一层判断 v-if="$slots[xxx]", 导致元素未渲染,请问这是什么原因呢?
这里可看到 https://codesandbox.io/s/old-pond-95ljj6?file=/src/App.vue
回答:
找到对应的代码改成如下:
<template v-for="(scopedSlot, name) in $scopedSlots" v-slot:[name]>
回答:
vue2中如果你要使用作用域插槽,那么应该使用$scopedSlots
HelloWorld
<template> <div class="hello">
<div v-if="$scopedSlots[Slots.Search]">
<slot :name="Slots.Search" :data="data1"></slot>
</div>
---------
<div v-if="$scopedSlots[Slots.Tools]">
<slot :name="Slots.Tools" :data="data2"></slot>
</div>
</div>
</template>
MyHelloWorld
<HelloWorld> <template v-for="(scopedSlot, name) in $scopedSlots" v-slot:[name]="data">
<slot :name="name" v-bind="data"></slot>
</template>
</HelloWorld>
index
<div class="test"> <HelloWorld>
<template v-slot:search="slotProps">
<span>{{(slotProps.data || '111') + 1}}</span>
<span>{{JSON.stringify(slotProps)}}</span>
</template>
<template v-slot:tools="slotProps">
<span>{{(slotProps.data || '222') + 2}}</span>
<span>{{JSON.stringify(slotProps)}}</span>
</template>
</HelloWorld>
||||||||||||
<MyHelloWorld>
<template v-slot:search="slotProps">
<span>{{(slotProps.data || '333') + 3}}</span>
<span>{{JSON.stringify(slotProps)}}</span>
</template>
<template v-slot:tools="slotProps">
<span>{{(slotProps.data || '444') + 4}}</span>
<span>{{JSON.stringify(slotProps)}}</span>
</template>
</MyHelloWorld>
</div>
以上是 求助一个关于Vue 插槽的问题? 的全部内容, 来源链接: utcz.com/p/934460.html