欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Vue 组件 - Slot 内容分发

Vue 组件 - Slot 内容分发

2025/5/31 14:05:11 来源:https://blog.csdn.net/json_ligege/article/details/146905451  浏览:    关键词:Vue 组件 - Slot 内容分发

 Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue组件 - Slot 内容分发

目录

Slot内容分发

旧版slot

单插槽

使用插槽

具名插槽

插槽实现导航

使用插槽优点

新版slot

Or

插槽版抽屉

总结


Slot内容分发

混合父组件的内容和子组件自己模板 -- 内容分发

父组件模板的内容在父组件作用域内编译,子组件模板内容在子组件作用域内编译。

旧版slot

如果直接在组件内部放入自定义内容是无法显示的;

slot插槽技术,可以在组件内部自定义显示内容。

单插槽

首先创建一个组件,在组件中设置好插槽位置,注意slot是固定的。

示例如下:

<script>Vue.component("child", {template:`<div>child<slot></slot></div>`})let vm = new Vue({el:"#box"})
</script>

使用插槽

写一行会在插槽中显示一行,多行的话,也会出现多行;

示例如下:

<div id="box"><!--当前组件或者节点 在哪个模板中,就能访问哪个模板状态--><child><div>面朝大海</div><div>春暖花开</div></child>
</div>

效果如下:

这叫做单个插槽写法。

具名插槽

如果要使用多个自定义内容的,可以使用具名插槽。

修改原有组件内容,改为具名插槽格式。

示例如下:

Vue.component("child", {template:`<div>child<slot name="a"></slot><slot name="b"></slot><slot name="c"></slot><slot></slot></div>`
})

组件使用slot,进行对号入座。

示例如下:

<div id="box"><!--当前组件或者节点 在哪个模板中,就能访问哪个模板状态--><child><div slot="a">面朝大海</div><div slot="b">春暖花开</div><div slot="c">从明天起做一个快乐的人</div><div>劈柴喂马 关心粮食和蔬菜</div></child>
</div>

效果如下:

插槽实现导航

利用slot可以实现导航栏和导航图标的灵活显示。

使用slot插槽后不再受到内置组件限制。

示例如下:

<div id="box"><!--当前组件或者节点 在哪个模板中,就能访问哪个模板状态--><navbar><button slot="left"> < 返回</button><i class="icon" slot="right">字体图标</i></navbar>
</div>
<script>Vue.component("navbar", {template:`<div><slot name="left"></solt><span>navbar</span><slot name="right"></solt></div>`})let vm = new Vue({el:"#box"})
</script>

使用插槽优点

通过插槽自定义导航栏两侧的内容。

扩展组件能力,提高组件复用性。

新版slot

新版slot是2.6版本的vue。并不是3后的版本。

以前的slot不知道算属性还是指令。

现在明确为指令写法,#号为简写方式,上面是指令写法。

定义组件和插槽不需修改。

示例如下:

<child><template v-slot:a><div>面朝大海</div></template><template v-slot:b><div>春暖花开</div></template>
</child>
Or
<navbar><template #left><button> < 返回 </button></template><template #right><i class="icon">字体图标</i></template>
</navbar>

 官网示例

插槽版抽屉

对原有的抽屉(子传父示例)改为插槽版。

即原来的导航列表的打开和关闭功能。

示例如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<script src="../lib/vue.js"></script>
<div id="box"><navbar><button @click="isShow=!isShow">点击</button></navbar><sidebar v-show="isShow"></sidebar>
</div>
<script>// 定义一个全局组件Vue.component("navbar", {template: `<div style="background-color: red">nabbar- <slot></slot></div>`,})Vue.component("sidebar", {template:`<div style="background-color: yellow"><ul><li>第一行</li><li>第二行</li><li>第三行</li>
</ul>
</div>`})let vm = new Vue({el:"#box",data:{isShow: true}})
</script>
</body>
</html>

 去掉Vue原有监听和触发事件,只通过isShow取反后的值判断来显示。

总结

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue组件 -  Slot 内容分发

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词