官方文档 https://cn.vuejs.org/v2/guide/components-slots.html
先上代码
父组件
<template>
<div class="view-container">
<div class="zs">
<p>我是父组件</p>
<HD :name="‘1223‘" :jk="jk" #default="user">
<p>{{ user }}</p>
<!-- <p>我还是默认插槽的内容</p>
<template slot="t">
<p>命名插槽</p>
</template>
<p>我是默认插槽</p>
<template slot="number" slot-scope="jw">
<p>哇哈哈{{ jk }}</p>
<h1 @click="ho">{{ jw.jw }}</h1>
</template>
<template v-slot:hj="slotProps">
<h2>kjkjjk</h2>
<p>{{ slotProps }}</p>
</template> -->
</HD>
</div>
</div>
</template>
<script>
import HD from "./hd"
export default {
data () {
return {
jk: ‘我是父组件的只‘
}
},
computed: {},
beforeMount () {
},
mounted () { },
methods: {
ho () {
console.log(jw)
console.log(‘我是父组件的事件‘)
}
},
components: {
HD
}
}
</script>
<style lang="scss" scoped>
@import ‘./index‘;
</style>
子组件
<template>
<div class="child">
<!-- <h1>我是子组建{{ name }}</h1>
<slot name="t"></slot> -->
<slot :user="jk" />
<!-- <slot name="number" :jw="jk" />
<slot name="hj" v-bind:user="jk"></slot> -->
</div>
</template>
<script>
export default {
props: {
name: {
type: String,
default: () => {
return ‘‘
}
}
},
data () {
return {
jk: ‘我是子组建的jk‘
}
},
watch: {
},
mounted () { },
methods: {
ho () {
console.log(‘我是子组件的事件‘)
},
handleChange (value) {
this.$emit(‘change‘, value)
},
}
}
</script>
<style lang="scss" scoped>
.child {
width: 100%;
border: 1px solid red;
}
</style>
正文
1. 默认插槽适用方式
父组件
<HD >
<p>我还是默认插槽的内容</p>
</HD>
子组件
<template>
<div class="child">
<slot />
</div>
</template>
2. 具名插槽
父组件 2.6之前写法
<HD>
<p>我还是默认插槽的内容</p>
<template slot="t">
<p>命名插槽</p>
</template>
<p>我是默认插槽</p>
</HD>
子组件
<div class="child">
<h1>我是子组建{{ name }}</h1>
<slot name="t"></slot>
<slot></slot>
</div>
2.6.0 版本之后 slot slot-scope(子向父传值)都被废弃 同意使用v-slot
父组件
<HD >
<template v-slot:t>
<h2>kjkjjk</h2>
<p>{{ slotProps }}</p>
</template>
</HD>
3.传值
向子插槽传值 就是父子组件传值·
子向父传值
slot-scope 已经废弃的用法
父组件
<template slot="number" slot-scope="jw"> <p>哇哈哈{{ jk }}</p> </template>
子组件
<div class="child"> <h1>我是子组建{{ name }}</h1> <slot name="number" :jw="jk" /> </div>
最新玩法
<HD :name="‘1223‘" >
<template v-slot:hj="slotProps">
<h2>kjkjjk</h2>
<p>{{ slotProps }}</p>
</template> -->
</HD>
简写
简写
<HD >
<template #hj="slotProps">
<h2>kjkjjk</h2>
<p>{{ slotProps }}</p>
</template> -->
</HD>
<HD >
<template #hj="{user}">
<h2>kjkjjk</h2>
<p>{{ slotProps }}</p>
</template> -->
</HD>
重命名
<HD >
<template #hj="{user:personal}">
<h2>kjkjjk</h2>
<p>{{ slotProps }}</p>
</template> -->
</HD>
追加
<HD >
<template #hj="{user:personal,name:‘zs‘}">
<h2>kjkjjk</h2>
<p>{{ slotProps }}</p>
</template> -->
</HD>
定义默认内容 也就是当子组件插槽没传值的时候
v-slot="{ user = { firstName: ‘Guest‘ } }"
动态插槽命名
<template v-slot:[dynamicSlotName]>
...
</template>
默认插槽简写
当只有默认插槽 当前组件上写 父组件
<HD v-slot="user"> <p>{{ user }}</p> </HD>
子组件
<div class="child"> <slot v-bind:user="jk" /> </div>
简写父组件 默认插槽 将参数写在父组件上 必须带上default
<HD #defalut="user"> <p>{{ user }}</p> </HD>
原文:https://www.cnblogs.com/jiubei/p/13344357.html