[svelte]slot插槽

参考:Vue 插槽(slot)使用(通俗易懂) - 掘金 (juejin.cn)

        组件子级 / Slot 属性 • Svelte 教程 | Svelte 中文网

组件可以像元素一样拥有子内容,就像元素一样,使用<slot>元素可以在子组件中公开内容,该元素可以包含在未提供的子组件时渲染的后备内容,就是组件在接受子组件之前,要知道把它们放在哪里

Slot
<slot><!-- optional fallback --></slot><slot name="x"><!-- optional fallback --></slot><slot prop={value} />

实例运用:

App.svelte

<script>import Box from './Box.svelte';
</script><Box><h2>Hello!</h2><p>This is a box. It can contain anything.</p>
</Box>

Bos.svelte

<style>.box {width: 300px;border: 1px solid #aaa;border-radius: 2px;box-shadow: 2px 2px 8px rgba(0,0,0,0.1);padding: 1em;margin: 0 0 1em 0;}
</style><div class="box"><slot></slot>
</div>

Box.svelte定义了Box组件的信息,并且预留了slot,就相当于一个空间吧,用来告诉其他组件,插入的内容放在哪里

App.svelte就引入Box作为标签,那其实就相当于下面的代码,只不过说把h2和p标签放在了其他的svelte文件中

<div class="box">
    <h2>Hello!</h2>
    <p>This is a box. It can contain anything.</p>
</div>

Slot fallbacks

组件中可以没有任何子项,用<em>标签来进行初始化(或者说显示提示内容

在上面的Box上进行修改

Box.svelte

<style>.box {width: 300px;border: 1px solid #aaa;border-radius: 2px;box-shadow: 2px 2px 8px rgba(0,0,0,0.1);padding: 1em;margin: 0 0 1em 0;}
</style><div class="box"><slot><em>no content was provided</em></slot>
</div>

App.svelte

<script>import Box from './Box.svelte';
</script><Box><h2>Hello!</h2><p>This is a box. It can contain anything.</p>
</Box><Box>
</Box><Box/>

这里<Box></Box>和<Box/>显示出来的内容是一样的,因为它们里面都是没有内容的

Slot的name属性

有时候我们不一定只用了一个slot标签,对吧,那这时候就要对每一个slot标签来进行区分

App.svelte

<script>import ContactCard from './ContactCard.svelte';
</script><ContactCard><span slot="name">P. Sherman</span><span slot="address">42 Wallaby Way<br>Sydney</span>
</ContactCard>

ContactCard.svelte

<style>.contact-card {width: 300px;border: 1px solid #aaa;border-radius: 2px;box-shadow: 2px 2px 8px rgba(0,0,0,0.1);padding: 1em;}h2 {padding: 0 0 0.2em 0;margin: 0 0 1em 0;border-bottom: 1px solid #ff3e00}.address, .email {padding: 0 0 0 1.5em;background:  0 0 no-repeat;background-size: 20px 20px;margin: 0 0 0.5em 0;line-height: 1.2;}.address { background-image: url(tutorial/icons/map-marker.svg) }.email   { background-image: url(tutorial/icons/email.svg) }.missing { color: #999 }
</style><article class="contact-card"><h2><slot name="name"><span class="missing">Unknown name</span></slot></h2><div class="address"><slot name="address"><span class="missing">Unknown address</span></slot></div><div class="email"><slot name="email"><span class="missing">Unknown email</span></slot></div>
</article>
Slot 内容检查

在某些情况下,可能希望根据父级是否传入特定插槽的内容来控制组件的各个部分。也许在该插槽周围有一个包装器,如果插槽为空,则不想渲染它。或者,也许只想在插槽存在时才申请课程。可以通过检查特殊变量的属性来执行此操作。

$$slots是一个对象,其键是父组件传入的插槽的名称。如果父级将插槽留空,则不会有该插槽的条目。

下面的例子是希望用于确保仅在父级传入插槽内容时才呈现这些元素

App.svelte

<script>import Project from './Project.svelte'import Comment from './Comment.svelte'
</script><style>h1 {font-weight: 300;margin: 0 1rem;}ul {list-style: none;padding: 0;margin: 0.5rem;display: flex;}@media (max-width: 600px) {ul {flex-direction: column;}}li {padding: 0.5rem;flex: 1 1 50%;min-width: 200px;}
</style><h1>Projects
</h1><ul><li><Projecttitle="Add Typescript support"tasksCompleted={25}totalTasks={57}><div slot="comments"><Comment name="Ecma Script" postedAt={new Date('2020-08-17T14:12:23')}><p>Those interface tests are now passing.</p></Comment></div></Project></li><li><Projecttitle="Update documentation"tasksCompleted={18}totalTasks={21}/></li>
</ul>

Comment.svelte

<script>export let name;export let postedAt;$: avatar = `https://ui-avatars.com/api/?name=${name.replace(/ /g, '+')}&rounded=true&background=ff3e00&color=fff&bold=true`;
</script><style>article {background-color: #fff;border: 1px #ccc solid;border-radius: 4px;padding: 1rem;}.header {align-items: center;display: flex;}.details {flex: 1 1 auto;margin-left: 0.5rem}h4 {margin: 0;}time {color: #777;font-size: 0.75rem;text-decoration: underline;}.body {margin-top: 0.5rem;}.body :global(p) {margin: 0;}
</style><article><div class="header"><img src={avatar} alt="" height="32" width="32"><div class="details"><h4>{name}</h4><time datetime={postedAt.toISOString()}>{postedAt.toLocaleDateString()}</time></div></div><div class="body"><slot></slot></div>
</article>

Project.svlte

<script>export let title;export let tasksCompleted = 0;export let totalTasks = 0;
</script><style>article {border: 1px #ccc solid;border-radius: 4px;position: relative;}article > div {padding: 1.25rem;}article.has-discussion::after {content: '';background-color: #ff3e00;border-radius: 10px;box-shadow: 0 2px 4px rgba(0,0,0,0.2);height: 20px;position: absolute;right: -10px;top: -10px;width: 20px;}h2,h3 {margin: 0 0 0.5rem;}h3 {font-size: 0.875rem;font-weight: 500;letter-spacing: 0.08em;text-transform: uppercase;}p {color: #777;margin: 0;}.discussion {background-color: #eee;border-top: 1px #ccc solid;}
</style><article class:has-discussion={$$slots.comments}><div><h2>{title}</h2><p>{tasksCompleted}/{totalTasks} tasks completed</p></div>{#if $$slots.comments}<div class="discussion"><h3>Comments</h3><slot name="comments"></slot></div>{/if}
</article>

现在,当插槽留空时,注释容器和通知点将不会呈现。

 Slot属性

App.svelte

<script>import Hoverable from './Hoverable.svelte';
</script><style>div {padding: 1em;margin: 0 0 1em 0;background-color: #eee;}.active {background-color: #ff3e00;color: white;}
</style><Hoverable let:hovering={active}><div class:active>{#if active}<p>I am being hovered upon.</p>{:else}<p>Hover over me!</p>{/if}</div>
</Hoverable><Hoverable let:hovering={active}><div class:active>{#if active}<p>I am being hovered upon.</p>{:else}<p>Hover over me!</p>{/if}</div>
</Hoverable><Hoverable let:hovering={active}><div class:active>{#if active}<p>I am being hovered upon.</p>{:else}<p>Hover over me!</p>{/if}</div>
</Hoverable>

Hoverable.svelte

<script>let hovering;function enter() {hovering = true;}function leave() {hovering = false;}
</script><div on:mouseenter={enter} on:mouseleave={leave}><slot hovering={hovering}></slot>
</div>

在上面的程序中,有一个名为 <Hoverable>的组件来跟踪鼠标是否放在上面,它需要将数据传回父组件,以便我们可以渲染插入的内容

为此,我们使用 *插槽属性(slot props)*。将Hoverable.sveltehovering的值传递给它的slot

命名插槽也拥有有属性,但是let指令需要写在 slot="..." 标签上而不是组件上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS命令大全:掌握关键命令及其精妙用法!

CentOS是一种流行的开源企业级Linux发行版&#xff0c;它基于Red Hat Enterprise Linux (RHEL)的源代码构建。对于系统管理员和运维工程师来说&#xff0c;掌握CentOS的常用命令至关重要。 这些命令不仅可以帮助管理服务器&#xff0c;还可以进行故障排查、性能监控和安全加固等…

树莓派 ubuntu22.04 meta安装 ros2-humble

可直接参考&#xff1a; https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html 设置区域设置 locale # check for UTF-8sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-…

代码随想录(番外)图论3|1020. 飞地的数量|130. 被围绕的区域

代码随想录&#xff08;番外&#xff09;图论3|1020. 飞地的数量|130. 被围绕的区域 1020. 飞地的数量 class Solution { public:int dir[4][2]{0,1,1,0,0,-1,-1,0};int count;void dfs(vector<vector<int>>& grid,int x,int y){grid[x][y]0;count;for(int i…

人形机器人核心架构梳理

定义&#xff1a;机器人是能进行运动、操纵或定位且具有一定程度自主能力的可编程执行机构。按外在形态分类可分为传统机器人和人形机器人&#xff0c;其中人形机器人是一种利用人工智能和机器人技术制造的具有类似人类外观和行为的机器人。 人形机器人发展历程&#xff1a; 人…

C++之运算符重载

一&#xff1a;运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也具有其 返回值类型&#xff0c;函数名字以及参数列表&#xff0c;其返回值类型与参数列表与普通的函数类似。 函数名字为&#xff1a;关键字oper…

Linux基础——冯诺依曼体系结构与操作系统

前言&#xff1a;在进入Linux进阶知识之前&#xff0c;我们还需理解最后一点知识&#xff0c;先认识理解冯诺依曼体系结构&#xff0c;再认识理解操作系统定位这样才能更好的理解后面的知识 本篇主要内容&#xff1a; 冯诺依曼体系结构操作系统概念与定位 冯诺依曼系统 1. 冯诺…

Flink学习(九)-jar 包提交给 flink 集群执行

一、界面执行 1&#xff0c;点击左侧的 submit new job&#xff0c;然后点击add New 2&#xff0c;粘贴程序入口&#xff0c;设置并行度 3&#xff0c;执行后&#xff0c;就可以在 taskManager 中找到相关任务了 二、控制台执行 在命令行中&#xff0c;在flink 的安装目录下&…

gitee关联picgo设置自己的typora_图床

一&#xff1a;去gitee官网创建仓库&#xff1a;typora_图床 1.百度搜索关键字&#xff1a;gitee&#xff0c;进入官网 2.进入gitee登录或者注册自己的账号 3.进入主页后&#xff0c;点击右上方 4.点击新建仓库 5.设置仓库名&#xff1a;typora_图床 6.点击5的创建&#xff0…

云渲染一张图多少钱

使用云渲染渲染一张效果图的价格没法确定多少钱一张&#xff0c;云渲染一张图的价格会受到多个因素的影响&#xff0c;如云渲染平台的定价策略、所选的渲染配置、优惠政策以及你提交的场景任务等。因此&#xff0c;无法给出确切的单一价格。 不同的云渲染平台会有不同的定价模…

发现问题并进行管理——bug和调试器

我们将程序中无法按照预期执行动作的现象称为bug。这不仅包括在编写源代码时输入的实时的bug&#xff0c;也包括在原本设计阶段就存在的设计时的bug&#xff0c; 去除bug&#xff0c;对程序进行修正使其可以正确执行动作的操作称为调试。有时&#xff0c;会将查找bug的操作也…

前端计算机网络之网络模型

什么是网络模型 对于前端开发者而言&#xff0c;理解网络模型的概念是非常重要的。网络模型是描述数据如何在网络中传输和处理的框架和规则&#xff0c;它有助于前端开发者更好地理解和优化应用程序与服务器之间的通信过程。 常用的两类模型 前端开发者需要了解的网络模型主…

Unity坐标相关——坐标系,单位

三维软件使用的坐标系分为&#xff1a;左手坐标系和右手坐标系 unity使用左手坐标系 左手坐标系和右手坐标系的区分方法&#xff1a; 在空间直角坐标系中&#xff0c;让左手拇指指向x轴的正方向&#xff0c;食指指向y轴的正方向&#xff0c;如果中指能指向z轴的正方向&#…

IDEA插件

POJO to JSON —— 实体转Json Smart Input —— 自动切换中英文 Translation —— 翻译 Maven Helper —— 依赖管理 .ignore —— 忽略提交文件 enum-quick-generate —— 枚举代码生成 粘贴到项目包下

Qt | 标准、复选、单选、工具、命令按钮大全

01、QPushButton QPushButton 类(标准按钮) 示例 3:默认按钮与自动默认按钮 02、QCheckBox QCheckBox 类(复选按钮) 1、复选按钮的第三状态(见右图 Qt5.10.1 的选中状态):是指除了选中 和未选中状态之外的第三种状态,这种状态用来指示“不变”,表 示用户既不选中也不取…

数据库常考理论

1 笛卡尔积X与自然连接∞的区别 2 求候选键 3 无损连接及函数依赖 4 范式判断 笛卡尔积&#xff1a;S1*S2,产生的结果包括S1和S2的所有属性列&#xff0c;并且S1中每条记录依次和S2中所有记录 组合成一条记录&#xff0c;最终属性列为S1S2属性列&#xff0c;记录数为S1*S2记…

新闻 | 电子系协同智能中心与昌平区未来高教园及多所高校开展交流,共话智能无人平台建设

2024年4月8日&#xff0c;清华大学电子工程系在北京昌平两岸共盈科技产业园电子系地空协同智能无人平台基地成功举办“美团杯”智能无人机挑战赛&#xff0c;清华大学电子系党委书记沈渊、昌平区未来城管委会校城融合处处长熊玉川、清华大学团委副书记黄峰等出席。此外来自昌平…

使用Gitee进行社交登录的流程

使用Gitee进行社交登录 创建Gitee第三方应用流程&#xff1a; 鼠标移动到个人头像上&#xff0c;点击账号设置 点击账号设置&#xff0c;选择左边目录下数据管理的第三方应用 然后选择创建应用 根据要求填写 填写好了上面的要求之后&#xff0c;点击创建应用&#xff0c;这样&…

国外企业使用生成式人工智能实例100

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

C#操作sql server之连接sql server数据库

C#是Microsoft公司为.NET Framework推出的重量级语言&#xff0c;和它搭配最完美的数据库无疑就是Microsoft SQL Server了。下面小编就总结了三种连接sql server数据库的方法。 第一种&#xff08;使用SqlConnection实现&#xff09;: 小提示: // 如果连接自己的数据库 可以将…

上位机开发PyQt5(一)【创建窗口、窗口标题、气泡、显示图片和图标、显示文字】

目录 一、 第一个Qt窗口 二、PyQt模块简介 三、窗口标题和气泡 setWindowTitle resize setToolTip 四、标签QLabel显示图片和图标 setPixmap setWindowIcon resize(label.pixmap().size()) 五、标签QLabel显示文字 setText QFont setPointSize setFont set…