Vue中的插槽和具名插槽(vue 2.5已淘汰的语法和vue3.0支持语法对比)

目录

不用插槽slot的我们应该怎么做

vue的插槽slot基本用法了解

具名插槽

没有具名插槽出现的问题

具名插槽vue 2.5语法展示(已被官方废弃且不会出现在Vue 3中)

具名插槽vue 2.6+语法展示(Vue 3支持)


首先来看看插槽的使用场景

不用插槽slot的我们应该怎么做



    
        
        不用插槽我们应该怎么做
        
        
    
    
        

运行结果

Vue中的插槽和具名插槽(vue 2.5已淘汰的语法和vue3.0支持语法对比)_第1张图片

DOM结构多了一层div,这并不理想,有人想换成template模板占位符试试?

但是如果你换成如下,则无法渲染,DOM结构根本查看不到内容,页面上值会渲染hello,不会渲染出父组件传来的lcylcy

template:`

hello

` // 换成ES6的语法可以换行方便查看

 

如果父组件传的内容比较少,这种形式还可以接受,但是如果传的内容很多呢?

比如变成了

这样代码就会很难阅读,有人可能会疑问我把这些标签放在

lcylcy

......之中不就好了?其实这样也是渲染不出来的。

当子组件的内容是根据父组件传递过来的内容进行显示的时候,我们可以不用这种丑语法,vue提供了新的语法slot

 

vue的插槽slot基本用法了解

显示的内容就是父组件向子组件插入进来的标签内容



    
        
        插槽基本用法了解
        
        
    
    
        

llllllllccccyyyy

运行结果

Vue中的插槽和具名插槽(vue 2.5已淘汰的语法和vue3.0支持语法对比)_第2张图片

我们可以发现在中的内容被放到的位置了,如果父组件在子组件里面不放东西,那么就会使用标签的的默认内容,比如这里去掉

llllllllccccyyyy

,运行结果如下

Vue中的插槽和具名插槽(vue 2.5已淘汰的语法和vue3.0支持语法对比)_第3张图片

文档见这里:插槽

 

具名插槽

没有具名插槽出现的问题

有header部分、footer部分分别想插入到标签的上下方,结果却写出了如下代码,搞出意料之外的结果



    
        
        没有具名插槽出现的问题
        
        
    
    
        
header

运行结果

Vue中的插槽和具名插槽(vue 2.5已淘汰的语法和vue3.0支持语法对比)_第4张图片

结果上面和下面分别加上了header和footer,哎,这根本不是我们想要的,能不能具体对应上呢?这个是可以的。

具名插槽vue 2.5语法展示(已被官方废弃且不会出现在Vue 3中)



    
        
        具名插槽vue2.5以前的使用
        
        
    
    
        
header

运行结果

Vue中的插槽和具名插槽(vue 2.5已淘汰的语法和vue3.0支持语法对比)_第5张图片

子组件的表示接受父组件传来的带有slot="xxx"的DOM内容,这样就能对应上

这样可以一次性能够传递多个区域的DOM结构的内容,子组件可以用具名插槽分别使用对应区域的DOM结构的内容

同样的,具名插槽也有默认值,和之前演示的例子一样,slot写着就会有用,要么显示匹配的值,匹配不上的内容就使用插槽的默认值。

文档见这里:废弃的具名插槽slot语法

 

具名插槽vue 2.6+语法展示(Vue 3支持)

自 2.6.0 起具名插槽有所更新,上面那一种方式在所有的 2.x 版本中 slot仍会被支持,但已经被官方废弃且不会出现在 Vue 3 中。

那我们就把上面的例子用2.6.0的新语法写一次



    
        
        插槽基本用法了解
        
        
    
    
        

运行结果是和上面用2.5语法写是一样的。

注意:就像v-on:可以缩写成@一样,v-slot:也可以缩写成#,所以v-slot:footer可以缩写成#footer

一个不带 name 的 会带有隐含的名字name="default",父组件传的DOM内容如果不写这种v-slot:header具体告知说要找name="header"的插槽,则就会匹配到不带name的插槽。

注意 v-slot 只能添加在