Vue 插槽(slot)使用(通俗易懂)

因为在2.6.0中,具名插槽 和 作用域插槽 引入了一个新的统一的语法 (即v-slot 指令)。它取代了 slot 和 slot-scope,并且现在网上都说的是一些老版本的内容,官方文档不太容易理解,所以就整理了一篇有关于插槽(slot)使用的文章
Slot 通俗的理解就是“占坑”,在组件模板中占好了位置,当使用该组件标签时候,组件标签里面的内容就会自动填坑(替换组件模板中slot位置)
并且可以作为承载分发内容的出口
内容插槽
定义两个组件 home.vue、test.vue
然后在home.vue组件中引用test.vue组件
插槽内可以包含普通文本

//home.vue Hello Word //test.vue

当组件渲染的时候,会被替换为Hello Word
插槽内也可以包含任何模板代码,包括HTML
在你的index.html引入Font Awesome图标的样式就直接可以用那里面的图标了
//home.vue Hello Word

插槽内添加其他组件
//home.vue Hello Word

如果中没有包含一个元素,则该组件起始标签和结束标签之间的任何内容都会被抛弃。
在插槽中使用数据
插槽跟模板其他地方一样都可以访问相同的实例属性(也就是相同的"作用域"),而不能访问的作用域
//home.vue //插槽可以获取到home组件里的内容 Hello {{enhavo}} data(){ return{ enhavo:'word' } }//home.vue //这里是获取不到name的,因为这个值是传给 Hello {{name}}

规则:
父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。
后备内容(默认内容)插槽
有时候我们需要给插槽设置一个具体的默认内容,当别的组件没有给你内容的时候,那么默认的内容就会被渲染
//test.vue //在slot插槽里设置默认内容 Submit 在home.vue里直接使用test.vue如下://home.vue

那么最后设置的默认内容 Submit 将会被渲染
假如我们提供内容呢?//home.vue 按钮

那么这个提供的内容将会替代默认的内容被渲染出来

具名插槽
有时候我们一个组件里需要多个插槽
那么怎么办呢? 对于这样的情况,元素有一个特殊的特性:name ,这个特性可以用来定义额外的插槽
这时候,我们就可以使用name属性

如果一个不带name属性的话,那么它的name默认为default
在向具名插槽提供内容的时候,我们可以在