(10)svelte 教程:Slots

(10)svelte 教程:Slots

什么是 Slots

Slots 是 Svelte 框架中的一种特性,用于在组件中定义插槽,以便父组件可以向子组件传递任意的内容。这种机制使得组件更具灵活性和可复用性,因为你可以在组件内部插入动态的、定制的内容。Slots 主要有两种类型:默认插槽和命名插槽。

逐行解释代码

App.svelte
<script>
    import Modal from './Modal.svelte';

    let showModal = false;
    let toggleModal = () => {
      showModal = !showModal;
    };
</script>
  • import Modal from './Modal.svelte';

    • 从当前目录中导入名为 Modal 的 Svelte 组件。
  • let showModal = false;

    • 声明一个名为 showModal 的变量,初始值为 false。这个变量用于控制 Modal 组件的显示与隐藏。
  • let toggleModal = () => { showModal = !showModal; };

    • 声明一个名为 toggleModal 的箭头函数。这个函数的作用是切换 showModal 的值,使其在 truefalse 之间切换。
<Modal {showModal} on:click={toggleModal}>
    <!-- <h3>Add a New Ninja</h3> -->
    <form>
      <input type="text" placeholder='name'>
      <input type="text" placeholder='belt colour'>
      <button>Add Ninja</button>
    </form>
    <div slot="title">
      <h3>Add a New Ninja</h3>
    </div>
</Modal>
  • <Modal {showModal} on:click={toggleModal}>

    • 使用 Modal 组件,并传递两个属性:
      • {showModal}:将 showModal 变量的当前值传递给 Modal 组件,使其能够根据该值决定是否显示。
      • on:click={toggleModal}:监听 Modal 组件的 click 事件,当该事件触发时,调用 toggleModal 函数。
  • <!-- <h3>Add a New Ninja</h3> -->

    • 注释掉的标题行,用于说明表单的用途。
  • <form>

    • 创建一个表单元素,包含三个子元素:
      • <input type="text" placeholder='name'>:一个文本输入框,用于输入忍者的名字。
      • <input type="text" placeholder='belt colour'>:一个文本输入框,用于输入忍者的腰带颜色。
      • <button>Add Ninja</button>:一个提交按钮,标签为 “Add Ninja”。
  • <div slot="title">

    • 创建一个 div 元素,并通过 slot="title" 属性指定其为命名插槽的内容。
    • <h3>Add a New Ninja</h3>:在 div 内部,创建一个 h3 元素,显示 “Add a New Ninja” 作为标题。
<main>
    <button on:click={toggleModal}>Open Modal</button>
</main>
  • <main><button on:click={toggleModal}>Open Modal</button>
    • 创建一个 main 元素,并在其内部创建一个按钮。
    • on:click={toggleModal}:为按钮绑定 click 事件,当按钮被点击时,调用 toggleModal 函数,切换 showModal 的值,从而控制 Modal 的显示与隐藏。
Modal.svelte
<script>
    export let showModal = false;
    export let isPromo = false;
</script>
  • export let showModal = false;

    • 声明并导出一个名为 showModal 的变量,初始值为 false。这个变量由外部(父组件)传入,用于控制 Modal 组件的显示与隐藏。
  • export let isPromo = false;

    • 声明并导出一个名为 isPromo 的变量,初始值为 false。这个变量用于控制 Modal 组件是否具有 promo 样式。
{#if showModal}
    <!-- svelte-ignore a11y-click-events-have-key-events -->
    <div class="backdrop" class:promo={isPromo} on:click|self>
        <div class="modal">
        <slot name="title">
            <h3>Default Title</h3>
        </slot>
        <slot></slot>
        </div>
    </div>
{/if}
  • {#if showModal}

    • Svelte 的条件渲染语句。如果 showModaltrue,则渲染内部的内容。
  • <!-- svelte-ignore a11y-click-events-have-key-events -->

    • Svelte 的注释,忽略关于 a11y-click-events-have-key-events 的可访问性警告。
  • <div class="backdrop" class:promo={isPromo} on:click|self>

    • 创建一个 div 元素,类名为 backdrop,并根据 isPromo 的值动态添加 promo 类。
    • on:click|self:为 div 绑定 click 事件,并添加 self 修饰符。该修饰符确保只有在直接点击 div 元素时才会触发事件处理函数,而不会在其子元素上触发。
  • <div class="modal">

    • 创建一个类名为 modaldiv 元素,用于显示模态框的内容。
  • <slot name="title">

    • 创建一个命名插槽,名称为 title。如果父组件提供了对应的插槽内容,则渲染该内容;否则,渲染默认内容。
  • <h3>Default Title</h3>

    • slot 内部,提供一个默认标题 “Default Title”。
  • <slot></slot>

    • 创建一个默认插槽。如果父组件提供了插槽内容,则渲染该内容;否则,插槽内容为空。

以上代码展示了如何在 Svelte 中使用 Slots 来实现灵活的组件内容插入。通过命名插槽和默认插槽,父组件可以在子组件中插入任意内容,从而增强组件的可复用性和定制化能力。

App.svelte 完整代码

<script>
	import Modal from './Modal.svelte';
  
	let showModal = false;
	let toggleModal = () => {
	  showModal = !showModal;
	};
  
  </script>
  
  <Modal {showModal} on:click={toggleModal}>
	<!-- <h3>Add a New Ninja</h3> -->
	<form>
	  <input type="text" placeholder='name'>
	  <input type="text" placeholder='belt colour'>
	  <button>Add Ninja</button>
	</form>
	<div slot="title">
	  <h3>Add a New Ninja</h3>
	</div>
  </Modal>

  <main>
	<button on:click={toggleModal}>Open Modal</button>
  </main>
  
  <style>
	  main {
		  text-align: center;
		  padding: 1em;
		  max-width: 240px;
		  margin: 0 auto;
	  }
  
	  @media (min-width: 640px) {
		  main {
			  max-width: none;
		  }
	  }
  </style>

Modal.svelte 完整代码

<script>
    export let showModal = false;
    export let isPromo = false;
</script>

{#if showModal}
    <!-- svelte-ignore a11y-click-events-have-key-events -->
    <div class="backdrop" class:promo={isPromo} on:click|self>
        <div class="modal">
        <slot name="title">
            <h3>Default Title</h3>
        </slot>
        <slot></slot>
        </div>
    </div>
{/if}
  
  <style>
    .backdrop{
      width: 100%;
      height: 100%;
      position: fixed;
      background: rgba(0,0,0,0.8);
    }
    .modal{
      padding: 10px;
      border-radius: 10px;
      max-width: 400px;
      margin: 10% auto;;
      text-align: center;
      background: white;
    }
    .promo .modal{
      background: crimson;
      color: white;
    }
  </style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

必看!硬核科普!什么是冻干?可以当主食喂的猫咪冻干分享

冻干猫粮作为近年来备受推崇的高品质选择&#xff0c;吸引了越来越多养猫人的目光。有着丰富养猫经验的我&#xff0c;早已开始采用冻干喂养。新手养猫的人可能会对冻干猫粮感到陌生&#xff0c;并产生疑问&#xff1a;这到底是什么&#xff1f;猫咪冻干可以天天喂吗&#xff1…

重新定义你的上网体验,微软WowTab助你一臂之力!

大家好&#xff0c;我是 Java陈序员。 浏览器是我们日常生活工作中必备的工具软件&#xff0c;使用非常频繁。 目前很多浏览器的新标签页虽然说功能齐全&#xff0c;但是充斥着广告和各种无效的信息&#xff0c;十分影响体验&#xff01; 今天&#xff0c;给大家安利一个浏览…

react 中使用 swiper

最近项目中需要用到轮播图&#xff0c;我立马想起了 swiper &#xff0c;那么本文就来带大家体验一下如何在 React 中使用这个插件&#xff0c;使用的是 函数组 hooks 的形式。 需求非常简单&#xff0c;就是一个可以自动播放、点击切换的轮播图&#xff08;跑马灯&#xff0…

基于jeecgboot-vue3的Flowable流程-待办任务(二)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 接下来讲待办的流程处理 1、根据这个vue3新的框架&#xff0c;按钮代码如下&#xff1a; /*** 操作栏*/function getTableAction(record) {return [{label: 处理,onClick: handleProcess…

洗地机品牌哪个牌子好?避坑必读精析4大热门品牌优缺点

科技越发达&#xff0c;生活就越便捷。以打扫卫生为例&#xff0c;越来越多的人放弃了传统的扫把和拖把&#xff0c;转而选择更轻松的清洁家电&#xff0c;比如洗地机。洗地机不仅高效&#xff0c;还具有智能化设计&#xff0c;可以让清洁变得轻松。它强大的吸尘功能能够轻松应…

水位雨量监测站解析

水位雨量监测站是一种集水位和雨量监测功能于一体的重要气象和水文监测设备。其设计和功能旨在实时、准确地监测和记录河流水位、降雨量等关键数据&#xff0c;为气象、水文、环保等领域提供重要的信息支持。以下是关于水位雨量监测站的详细扩写&#xff1a; 系统组成 水位雨…

Midjourney绘画参数设置详解

在数字艺术和设计领域&#xff0c;Midjourney是一款强大的绘画工具&#xff0c;它允许艺术家和设计师以数字方式创作出精美的图像。为了充分发挥Midjourney的潜力&#xff0c;正确设置其绘画参数至关重要。本文将深入探讨Midjourney的绘画参数设置&#xff0c;帮助用户更好地掌…

掌握Element UI:加速你的网页设计过程!

Element UI 是一套为开发者、UI/UX设计师和产品经理准备的采用Vue 2.0作为基础框架实现的组件库&#xff0c;提供配套的设计资源&#xff0c;可以帮助设计快速成型。即时设计也内置Element UI Kit资源&#xff0c;但有些小伙伴还是对此不太了解&#xff0c;接下来本文会详细带你…

discuz论坛怎么修改备案信息

大家好&#xff0c;今天给大家分享下discuz如何填写备案信息并且展示在网站首页。大家都知道国内网站都需要备案&#xff0c;不通过备案的网站上是没办法通过域名打开的。大家也可以通过搜索网创有方&#xff0c;或者直接点击网创有方 查看悬挂备案号后的效果。 首先大家可以看…

STM32--ESP8266 WiFi模块

前言&#xff1a;此文所述模块为正点原子出版的ATK-ESP8266模块 一、特性参数 ATK-ESP8266 是 ALIENTEK 推出的一款高性能的 UART-WiFi&#xff08;串口-无线&#xff09;模块&#xff0c;ATK-ESP8266 板载了正点原子公司自主开发的 ATK-ESP-01 模块。 该模块是 ATK_ESP8266 的…

Flutter:革新移动开发的开源框架

在今天的移动应用开发领域&#xff0c;Flutter 已成为最受欢迎的开源框架之一。由 Google 开发并在 2017 年发布&#xff0c;Flutter 允许开发者使用单一代码库来构建跨平台的高性能应用&#xff0c;有效地覆盖了 iOS 和 Android 两大平台。接下来&#xff0c;我们将深入探索 F…

使用软件分享--剪映(不需要会员版)剪映 Jianying_pro_3_2_0_8778_beta9_jianyingpro_beta(Windows)

专栏介绍&#xff1a;本专栏主要分享一些实用的软件&#xff08;Po Jie版&#xff09;&#xff1b; 声明1&#xff1a;软件不保证时效性&#xff1b;只能保证在写本文时&#xff0c;该软件是可用的&#xff1b;不保证后续时间该软件能一直正常运行&#xff1b;不保证没有bug&am…

RocketMQ发送顺序消息原理与代码demo

RocketMQ 的顺序消息功能允许消息以发送的顺序被消费&#xff0c;这对于很多业务场景&#xff08;如交易处理、订单生成等, 或某些需要按照一定顺序执行的业务场景&#xff09;至关重要&#xff0c;因为这些场景下操作的执行顺序不能被打乱。顺序消息的实现需要确保消息在发送和…

【30天精通Prometheus:一站式监控实战指南】第10天:blackbox_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…

【51单片机】智能百叶窗项目

文章目录 功能演示&#xff1a;前置要求&#xff1a;主要功能&#xff1a;主要模块&#xff1a;主函数代码&#xff1a; 具体的仿真程序和代码程序已经免费放置在资源中&#xff0c;如有需要&#xff0c;可以下载进行操作。 功能演示&#xff1a; 前置要求&#xff1a; 编译软…

Linux - 文件管理高级 find、grep

0.管道 | 将前面命令的标准输出传递给管道作为后面的标准输入 1.文件查找 find find 进行文件查找时&#xff0c;默认进行递归查找&#xff0c;会查找隐藏目录下的文件 1.1 用法 # find 查找路径 查找条件... -type // 文件类型 f 普通文件 b 设备 d …

MacOS13-将数据库转为markdown,docx格式

MacOS13-将数据库转为markdown&#xff0c;docx格式 文章目录 先说踩坑点各种模块缺失 代码效果总结参考 先说踩坑点 各种模块缺失 tkinter mysql 没错&#xff0c;你可以直接点击安装&#xff1b; 如果还出现报错 你需要打开终端 pip install mysqlclient再次点进去安…

C语言| 输出菱形*(梳理篇II)

C语言| 输出菱形*-CSDN博客 凡事还是得自己独立思考后&#xff0c;写一遍程序才能发现问题所在。 容易犯的错误&#xff1a; 【完整程序注释】 运行结果 /* 输出菱形 1 总行数 n为奇数&#xff0c;分上三角形下三角形&#xff0c;只考虑左边的空格和星号* 2 上三角形 行数…

toefl listening_托福听力

x.1 课程介绍 x.1.1 课程介绍 考试介绍 注意事项如下&#xff0c; x.1.2 分数设定和方法论 x.2.1 细节题解法 x.2.2 对话主旨题解法 听力对话不要扣分&#xff1b; 内容主旨题&#xff0c;以what开头&#xff1b; 目的主旨题&#xff0c;以why开头&#xff1b; 目的主旨题…

【论文笔记】Content-based Unrestricted Adversarial Attack

图2&#xff1a;Adversarial Content Attack的流程。首先使用Image Latent Mapping将图像映射到潜变量空间。然后&#xff0c;用Adversarial Latent Optimization生成对抗性样本。最后&#xff0c;生成的对抗性样本可以欺骗到目标分类模型。 3.1 Image Latent Mapping 对于扩…