大前端之vue插槽slot
什么是插槽?
在vue中通过slot可以向组件中指定位置插入内容。
正常情况下调用一个组件 的时候,组件显示的内容为com-input组件中模板的内容。可是想在调用组件的时候给组件添加内容,该怎么办呢?
//父组件
我是插槽内容
//子组件com-form
//显示---我是组件内容 我是插槽内容
插槽的通俗理解就是是“占坑”,在组件模板中占好了位置,当使用该组件标签时候,组件标签里面的内容就会自动填坑(替换组件模板中位置),当插槽也就是坑有命名时,组件标签中使用属性slot=”mySlot”的元素就会替换该对应位置内容。
一、单个插槽/默认插槽/匿名插槽
首先是单个插槽,单个插槽是vue的官方叫法,但是其实也可以叫它默认插槽,或者与具名插槽相对,我们可以叫它匿名插槽。因为它不用设置name属性。
单个插槽可以放在组件任意位置,但是一个组件有且只能有一个单个插槽,相对应的,具名插槽就可以有很多个。
父组件:
子组件:
最终显示
二、具名插槽
匿名插槽没有name属性,所以是匿名插槽,那么,插槽加了name属性,就变成了具名插槽。具名插槽可以在一个组件中出现N次,出现在不同的位置。下面的例子,就是一个有两个具名插槽和单个插槽的组件,这三个插槽被父组件用同一套css样式显示了出来,不同的是内容上略有区别。
父组件:
子组件:
把数据传递给父组件,父组件只需要提供样式即可。
子组件child
export default {
data: function(){
return {
data: ['zhangsan','lisi','wanwu','zhaoliu','tianqi','xiaoba']
}
}
}
父组件
{{user.data}}
我就是模板
最终展示
四、v-slot
在 2.6.0 中,我们为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。它取代了 slot 和 slot-scope 这两个目前已被废弃但未被移除且仍在文档中的 attribute。
// 根组件
// 子组件
我是组件内容
这里是父组件
菜单1
菜单2
菜单3
菜单4
菜单5
菜单6
这里是子组件
这里是父组件
菜单1
菜单2
菜单3
菜单4
菜单5
菜单6
菜单-1
菜单-2
菜单-3
菜单-4
菜单-5
菜单-6
菜单->1
菜单->2
菜单->3
菜单->4
菜单->5
菜单->6
// 具名插槽
// 匿名插槽
最终显示
三、作用域插槽
匿名插槽和具名插槽都是在父组件中定义内容与样式,子组件只是负责放在哪。但是如果子组件提供数据,那这样的话需要子组件的这里是子组件
// 具名插槽这里是子组件
// 作用域插槽这里是父组件
{{item}}
- {{item}}
{{slotProps.header + ' ' + msg}}
A paragraph for the main content.
And another one.
Here's some contact info
--header start--
--header over--
--default start--
--default over--
--footer start--
--dooter over--
最终显示
发表评论 (审核通过后显示评论):