组件插槽
slot又名插槽,是Vue的内容分发机制,组件内部的模板引擎使用slot元素作为承载分发内容的出口。
插槽slot是子组件的一个模板标签元素,而这一个标签元素是否显示,以及怎么显示是由父组件决定的。
slot又分三类,默认插槽,具名插槽和作用域插槽。
可以在父组件中直接修改子组件的 ui
匿名插槽
默认插槽:又名匿名插槽,当slot没有指定name属性值的时候一个默认显示插槽,一个组件内只有有一个匿名插槽。
1.先创建一个Vue实例,挂载到id为app的div上面
<div id="app">
</div>
<script src="./js/vue.js"></script>
<script>
// 根组件(父组件,又叫基组件)
let vm = new Vue({
el:'#app',
})
</script>
2.在创建一个局部组件,在组件中定义好插槽,插槽一定要放在子组件中
// 申明局部组件
let child = {
template:`
<div>
<p>我是子组件</p>
<p>我是一行话</p>
<slot>这是占位的内容</slot>
</div>
`
}
3.在vm实例中的子组件中心定义好局部组件,并在视图层渲染
// 根组件(父组件,又叫基组件)
let vm = new Vue({
el:'#app',
// 子组件们(注册中心)
components:{
// 键值对,当键和值相同可以省略
child
}
})
<div id="app">
<!-- 使用组件 -->
<child></child>
</div>
具名插槽
在子组件中定义插槽时,给对应的插槽分别起个名字,方便后边插入父组件将内容根据name来填充对应的内容。
先在子组件中给插槽起好名字(匿名插槽其实也有个默认的名字,default,可以省略不写):
-
使用具名插槽的方法
-
1.在子组件中要先定义好插槽,并起好名字
-
2.在父组件中的视图层中,某个标签上,给这个标签添加slot属性
-
作用域插槽
插槽的优点
-
可以在父组件中定制子组件的 ui
-
可以解决多层组件传参问题
-
可以对组件进行抽离方便管理