目录
插槽和v-slot介绍
组件插槽
默认插槽
具名插槽
条件插槽
动态插槽
作用域插槽
插槽和v-slot介绍
Vue插槽(Slot)是Vue.js框架中用于实现组件间内容传递和模板通信的一种机制。通过插槽,父组件可以向子组件的指定位置插入HTML结构或内容,从而实现更灵活和可复用的组件设计。
Vue插槽是构建大型和可复用组件库时的强大工具,通过插槽,我们能够塑造出更具灵活性和可定制性的组件,满足各类繁杂的界面需求。
v-slot 用于定义插槽的模板内容。它允许父组件向子组件的插槽中传递内容,从而实现了更灵活、可复用的组件设计。v-slot 取代了早期 Vue 版本中的 slot 和 slot-scope 属性,并提供了更直观和强大的语法。
v-slot 有两种语法形式:
缩写语法:使用“#”符号表示 v-slot,其后紧跟插槽名称。例如:
<template #插槽名称>
<!-- 插槽内容 -->
</template>
完整语法:采用 v-slot 指令,其后跟着“:”,接着是插槽名称。例如:
<template v-slot:插槽名称>
<!-- 插槽内容 -->
</template>
组件插槽
默认插槽
默认插槽又名匿名插槽,当 <slot> 元素没有指定 name 属性时,它就是一个默认插槽。一个组件内只有一个匿名插槽。其特点是父组件决定结构和数据。父组件中传递给默认插槽的内容,将在子组件中 <slot> 标签所在的位置进行显示。
示例代码如下:
<body>
<div id="app">
<el-divider content-position="left">默认插槽</el-divider>
<el-row>
<el-col :span="24">
<default-slot/>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<default-slot :btn-text="text">
<!-- 插槽内容 -->
<p class="p">This content will go into the default slot.</p>
</default-slot>
</el-col>
</el-row>
</div>
</body>
<script>
const {createApp}=Vue;
// 定义一个局部组件——默认插槽——子组件
const DefaultSlot={
template:`
<div>
<el-button>{{btnText}}</el-button>
<slot>{{slotContent}}</slot>
</div>
`,
props:{
btnText:{
type:String,
default:'default-btn-text'
}
},
data(){
return{
slotContent:'default-slot-content'
}
}
}
const app=createApp({
components:{
'default-slot':DefaultSlot,
},
data(){
return{
text:'提交'
}
}
})
app.use(ElementPlus);
app.mount('#app');
</script>
分析:<slot>元素是一个插槽出口(slot outlet),用于标示父组件提供的插槽内容(slot content)将在哪里被渲染。父组件可以在使用子组件时,向子组件的插槽中插入自定义内容。如果父组件没有提供插槽内容,子组件中的默认内容将被显示;如果父组件提供了插槽内容,则会替换默认内容。
运行结果,截图如下: