插槽
vue为了组件封装者
提供的能力,允许开发者在封装组件时把不确定的,希望由用户指定的部分
定义为插槽 也是一种封装组件时的占位符
基本用法
< template>
< div class = " left-container" >
< h3> Left 组件</ h3>
< hr>
< slot> </ slot>
</ div>
</ template>
< template>
< div class = " app-container" >
< h1> App 根组件</ h1>
< hr />
< div class = " box" >
< Left>
< p> 这是left组件内的插槽</ p>
</ Left>
</ div>
</ div>
</ template>
< script>
import Left from './components/Left.vue'
import Right from './components/Right.vue'
export default {
components : {
Left,
Right
}
}
</ script>
v-slot指令
可以将我们的内容指定到固定的插槽中去 v-slot只能用在template身上
用法:v-slot:default
template是虚拟的标签,不会被渲染到组件树中
< template v-slot: default>
< p > 这是left组件内的插槽</ p>
</ template>
插槽内的默认内容
如果插槽内没有内容则会显示slot标签内的默认内容
< slot name = " default" > 这是插槽内的default内容</ slot>
< Left>
</ Left>
具名插槽的定义和使用
< template>
< div class = " article-container" >
< div class = " header-box" >
< slot name = " header" > </ slot>
</ div>
< div class = " content-box" >
< slot name = " content" > </ slot>
</ div>
< div class = " footer-box" >
< slot name = " footer" > </ slot>
</ div>
</ div>
</ template>
< script>
export default {
name : 'Article'
}
</ script>
在父组件里面通过template 的v-slot或者#来绑定相应的名称
< template>
< div class = " app-container" >
< h1> App 根组件</ h1>
< hr />
< Article>
< template #header >
< h1> 一首诗</ h1>
</ template>
< template #content >
< h1> 二首诗</ h1>
</ template>
< template #footer >
< h1> 三首诗</ h1>
</ template>
</ Article>
</ div>
</ template>
< script>
import Article from './components/Article.vue'
export default {
components: {
Article
}
}
</script
作用域插槽的用法
在封装组件时,为预留的<slot>提供对应的属性,这种用法叫做“作用域插槽”
插槽在定义时可以传递点儿数据给父组件 msg="hello-vue.js"
< div class = " content-box" >
< slot name = " content" msg = " hello-vue.js" > </ slot>
</ div>
< template #content = ' scope' >
< h1> 二首诗</ h1>
< p> {{scope}}</ p>
</ template>
插槽的解构赋值
可以在父组件的templa标签上进行解构赋值拿到封装组件slot标签上属性
< template>
< div class = " article-container" >
< div class = " header-box" >
< slot name = " header" > </ slot>
</ div>
< div class = " content-box" >
< slot name = " content" msg = " hello-vue.js" :user = " userInfo" > </ slot>
</ div>
< div class = " footer-box" >
< slot name = " footer" > </ slot>
</ div>
</ div>
</ template>
< script>
export default {
name : 'Article' ,
data ( ) {
return {
userInfo : {
name : 'zs' ,
age : 18 ,
sex : '男'
}
}
}
}
</ script>
< template #content = ' {msg,user}' >
< h1> 二首诗</ h1>
< p> {{msg}}</ p>
< p> {{user}}</ p>
</ template>