上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

vue插槽使用方法

guduadmin341月前

细致讲解slot插槽的使用

彻底搞懂slot插槽,图文详解1、什么是插槽Vue 实现了一套内容分发的 API,将 `` 元素作为承载分发内容的出口。插槽实质是对子组件的扩展,通过``插槽向组件内部指定位置传递内容。slot的出现是为了父组件可以堂而皇之地在子组件中加入内容。插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制。2、slot 与 props 的区别3、插槽的使用(1)匿名插槽(单个插槽

​编辑 五花漏  ·  2020-11-19 15:39:48 发布

1、什么是插槽

VUE官方文档的解释:

Vue 实现了一套内容分发的 API,将  元素作为承载分发内容的出口。

个人理解:

插槽实质是对子组件的扩展,通过插槽向子组件内部指定位置传递内容。

或者这么说:

 的出现是为了父组件可以堂而皇之地在子组件中加入内容。

打个比方:

有句话叫一个萝卜一个坑。父组件想要在子组件中种萝卜,需要在子组件中挖个坑,  就是一个【萝卜坑】。父组件想要给子组件添加的内容就是【萝卜】。

由此可见,萝卜种不种,种什么萝卜由父组件控制;萝卜坑在哪,由子组件控制。 换言之 ——

插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制。

举个栗子,在 Father 父组件内部使用名为 Child 的子组件,向子组件的内部的“指定位置”传递一些内容,你可以这么写:


Child的标题

我是一个萝卜坑

Father的标题

我是个萝卜~

Father的标题

Child的标题

我是个萝卜~

看到没,是不是就像父组件的萝卜种到了子组件的坑里?

看到这里不禁发出灵魂一问:这不就是父组件给子组件传了个值吗?那和props有啥区别?

2、与 props 的区别

通过props属性,父组件只能向子组件传递属性、方法




vue插槽使用方法,在这里插入图片描述,第1张vue插槽使用方法,在这里插入图片描述,第2张

而插槽还可以传递带标签的内容、甚至是组件:

Father的标题

{{username}}

3、插槽的使用

(1)匿名插槽(又叫单个插槽、默认插槽)

就是没有设置name属性的插槽。

这是个匿名插槽(没有name属性),这串字符是匿名插槽的默认值。

1)可以放置在组件的任意位置。

2)一个组件中只能有一个匿名插槽。

3)匿名插槽只能作为没有slot属性的元素的插槽。

class="child">
    

子组件

头部默认值 主体默认值 这是个匿名插槽(没有name属性),这串字符是匿名插槽的默认值。
class="parent">
 

父组件

我是主体

我是其他内容

我是尾巴

运行结果 :

父组件

子组件

头部默认值 (具名插槽的默认值被渲染,因为父组件没有为此插槽提供内容)

我是主体 (具名插槽的默认值被覆盖)

我是其他内容 (匿名插槽的默认值被覆盖)

注意:

1、我是尾巴

 插槽被丢弃了,因为子组件中没有的插槽与之匹配。

2、 如果子组件中的匿名插槽不存在,则

我是其他内容

也会被丢弃。

这个例子就是想说明两点:

1、坑会一直在,但是没有找到坑的萝卜就会被丢弃!
2、后来者居上,后面的萝卜会覆盖原来坑里的萝卜

(2)具名插槽

意思就是具有名字的插槽,名字通过属性name来定义。

这是个具名插槽(有name属性),这串字符是具名插槽的默认值。

一个组件中可以有很多具名插槽,出现在不同的位置。


上面的那个例子,是直接把slot直接用在普通标签或者