目录
不用插槽slot的我们应该怎么做
vue的插槽slot基本用法了解
具名插槽
没有具名插槽出现的问题
具名插槽vue 2.5语法展示(已被官方废弃且不会出现在Vue 3中)
具名插槽vue 2.6+语法展示(Vue 3支持)
首先来看看插槽的使用场景
不用插槽我们应该怎么做
运行结果
DOM结构多了一层div,这并不理想,有人想换成template模板占位符试试?
但是如果你换成如下,则无法渲染,DOM结构根本查看不到内容,页面上值会渲染hello,不会渲染出父组件传来的lcylcy
template:`
hello
` // 换成ES6的语法可以换行方便查看
如果父组件传的内容比较少,这种形式还可以接受,但是如果传的内容很多呢?
比如
这样代码就会很难阅读,有人可能会疑问我把这些标签放在 lcylcy
当子组件的内容是根据父组件传递过来的内容进行显示的时候,我们可以不用这种丑语法,vue提供了新的语法slot
插槽基本用法了解
llllllllccccyyyy
运行结果
我们可以发现在
文档见这里:插槽
有header部分、footer部分分别想插入到标签的上下方,结果却写出了如下代码,搞出意料之外的结果
没有具名插槽出现的问题
header
运行结果
结果上面和下面分别加上了header和footer,哎,这根本不是我们想要的,能不能具体对应上呢?这个是可以的。
具名插槽vue2.5以前的使用
header
运行结果
子组件的
这样可以一次性能够传递多个区域的DOM结构的内容,子组件可以用具名插槽分别使用对应区域的DOM结构的内容
同样的,具名插槽也有默认值,和之前演示的例子一样,slot写着就会有用,要么显示匹配的值,匹配不上的内容就使用插槽的默认值。
文档见这里:废弃的具名插槽slot语法
自 2.6.0 起具名插槽有所更新,上面那一种方式在所有的 2.x 版本中 slot
仍会被支持,但已经被官方废弃且不会出现在 Vue 3 中。
那我们就把上面的例子用2.6.0的新语法写一次
插槽基本用法了解
header
运行结果是和上面用2.5语法写是一样的。
注意:就像v-on:可以缩写成@一样,v-slot:也可以缩写成#,所以v-slot:footer可以缩写成#footer
一个不带 name
的
注意 v-slot
只能添加在 上 (只有一种例外情况)
文档见这里:具名插槽
关注、留言,我们一起学习。
===============Talk is cheap, show me the code================