![5dbc596dae01f77216e75ac823f8c2c3.png](https://i-blog.csdnimg.cn/blog_migrate/16286b83b588ed32df50b5f38d4c5e1f.png)
1
slot基本使用
插槽功能通过标签: 来实现。
首先我们实现一个template,其中使用slot标签添加了一个插槽,插槽中放置了一个按钮标签,当组件标签中未添加内容时,就会默认显示按钮标签。
我是组件模板
我是组件模板
默认按钮
接着在DOM中对组件标签使用:
我是P标签
我是P标签
我是span标签
我是i标签
显示效果:
可以看出:
可直接在模板中使用一组
标签进行插槽的添加;
若slot标签中添加了内容,但DOM使用组件标签未填充元素,slot标签中的内容会作为默认值显示。
DOM中组件标签中填充的内容,无论一个或多个,都会替换slot标签默认值,一起作为替换元素。
2
具名插槽
有时我们使用组件时需要多个插槽,就需要区分开每个插槽。
slot标签可以通过name属性给每个插槽命名:
左边
中间
右边
上述代码中,定义了left、right两个具名插槽,中间还有一个无名插槽,无名插槽有一个默认的名字:default。
在DOM中给插槽提供内容时,需要在元素上使用
v-slot
指令,并且在v-slot
后跟上插槽的名称:
left插槽 默认插槽 right插槽
没有被template包裹的内容会传入到无名插槽中。
注:v-slot
指令只能添加在标签上(除了独占默认插槽的缩写语法,见3.1节)。
2.1 v-slot语法糖
v-slot:
可以使用语法糖#
来替换,例如v-slot:right
可以写为#right
。
3
编译作用域
组件都有自己的编译作用域,比如在子组件中定义的data内容,在父组件中是不能访问的。但是在使用插槽的时候,有时往往需要替换的插槽内容能够访问子组件的数据,就会用到插槽Props
。
下列代码中,子组件的data定义了一个user对象,其中包含firstname与lastname的值,为了在父组件中能访问到user,我们就将user
作为slot
元素的一个attribute,通过v-bind绑定在slot标签上,此时被绑定的user就叫做插槽Props
。
子组件的template如下:
{{user.lastname}}
然后在父级作用域中,使用v-slot
来定义插槽Props
的名字,这里使用的名称为slotProps
,名称可以自定义,然后就可以在Mustache语法中使用插槽名称.插槽Props.属性
来访问子组件的数据:
{{slotProps.user.firstname}}
3.1 独占默认插槽的缩写语法
在第二节最后说到v-slot只能绑定在template上,而下面这种情况就是唯一的例外:当被提供的内容 只有默认插槽 (除了默认插槽不能再含有具名插槽或多个插槽)时,组件的标签才可以被当做插槽的模板来使用,有以下两种写法: {{slotProps.user.firstname}} {{slotProps.user.firstname}}
![c56ce6344000d8bcc7b41f5c3afbb6fb.png](https://i-blog.csdnimg.cn/blog_migrate/e3beb896e39db5adc833ecc9dc02bf41.png)
![0487de7edf03748e44f1b5c0f355fa73.png](https://i-blog.csdnimg.cn/blog_migrate/7db3fdc6c7a66f9226d8d47f83506f4c.jpeg)
微信:熊吱
扫码关注我们
互联网知识交流平台
![2c520d53e6f0a3fd5b9535d05e59df38.gif](https://i-blog.csdnimg.cn/blog_migrate/7744892d0db7d7dc7d48b3271308751d.gif)
![38ca349007a49f1a39df5aa8ffeac7f9.gif](https://i-blog.csdnimg.cn/blog_migrate/514dcbd8c3b12200d2e48e46ee88311c.gif)