一般插槽
子组件
List.vue
<template>
<div>
<!-- 可以在slot元素中增加默认内容 -->
<slot></slot>
</div>
</template>
父组件使用子组件,元素体的所有内容都会替换子组件的slot
元素位置处
<template>
<div id="app">
<List>
<span>content</span>
</List>
</div>
</template>
具名插槽
子组件
List.vue
<template>
<div>
<slot name="headerSlot"></slot>
<slot></slot>
<slot name="footerSlot"></slot>
</div>
</template>
父组件使用子组件,按照slot
属性对应插槽,无名称的一般插槽与上文描述的规则一致
<template>
<div id="app">
<List>
<template slot="headerSlot">
<h1>Oliver</h1>
</template>
<div>content</div>
<template slot="footerSlot">
<h4>Powered by Oliver</h4>
</template>
</List>
</div>
</template>
Vue 2.6.0以后的新语法
<template>
<div id="app">
<List>
<template v-slot:headerSlot>
<h1>Oliver</h1>
</template>
<div>content</div>
<template v-slot:footerSlot>
<h4>Powered by Oliver</h4>
</template>
</List>
</div>
</template>
作用域插槽
子组件,将需要被父组件访问的属性放在slot
元素中
List.vue
<template>
<div>
<slot name="headerSlot" :name="name"></slot>
</div>
</template>
<script>
export default {
data() {
return {
name: 'Oliver'
}
}
</script>
父组件使用slot-scope
,通过指定的指示符可访问子组件放在slot
元素中的属性
<template>
<div id="app">
<List>
<template slot="headerSlot" slot-scope="headerSlotObj">
<h1>{{headerSlotObj.name}}</h1>
</template>
</List>
</div>
</template>
Vue 2.6.0以后的新语法
<template>
<div id="app">
<List>
<template v-slot:headerSlot="headerSlotObj">
<h1>{{headerSlotObj.name}}</h1>
</template>
</List>
</div>
</template>
子组件,只有默认插槽
List.vue
<template>
<div>
<slot :name="name"></slot>
</div>
</template>
<script>
export default {
data() {
return {
name: 'Oliver'
}
}
</script>
Vue 2.6.0以后的新语法,缩写
<template>
<div id="app">
<List v-slot="headerSlotObj">
<h1>{{headerSlotObj.name}}</h1>
</List>
</div>
</template>
PREVIOUSVue组件间数据传递
NEXTVuex使用