(9)svelte 教程: Event Modifiers

(9)svelte 教程: Event Modifiers

什么是 Event Modifiers

Event Modifiers 是 Svelte 框架中的一种特性,它允许你在绑定事件处理函数时,添加一些修饰符来修改事件的默认行为或事件流。通过这些修饰符,可以更简洁、更直观地控制事件的行为,而无需在事件处理函数中编写额外的代码。常见的 Event Modifiers 包括:

  • preventDefault:阻止事件的默认行为。
  • stopPropagation:阻止事件冒泡。
  • self:仅在事件的目标元素上触发事件处理函数,而不在其子元素上触发。
  • once:确保事件处理函数只执行一次。
  • capture:在捕获阶段处理事件,而不是冒泡阶段。
  • passive:提示浏览器事件处理程序不会调用 preventDefault,以便优化性能。

逐行解释代码

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 message='Hello, Ninjas!' {showModal} on:click={toggleModal} />
<main>
    <button on:click|once={toggleModal}>Open Modal</button>
</main>
  • <Modal message='Hello, Ninjas!' {showModal} on:click={toggleModal} />

    • 使用 Modal 组件,并传递三个属性:
      • message='Hello, Ninjas!':向 Modal 组件传递一个名为 message 的字符串属性,值为 ‘Hello, Ninjas!’。
      • {showModal}:将 showModal 变量的当前值传递给 Modal 组件,使其能根据该值决定是否显示。
      • on:click={toggleModal}:监听 Modal 组件的 click 事件,当该事件触发时,调用 toggleModal 函数。
  • <main><button on:click|once={toggleModal}>Open Modal</button>

    • 创建一个 main 元素,并在其内部创建一个按钮。
    • on:click|once={toggleModal}:为按钮绑定 click 事件,并添加 once 修饰符。点击按钮时,调用 toggleModal 函数,且此函数只执行一次,按钮的点击事件处理器随后会自动移除。
Modal.svelte
<script>
    export let showModal = false;
    export let isPromo = false;
    export let message = 'default message';
</script>
  • export let showModal = false;

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

    • 声明并导出一个名为 isPromo 的变量,初始值为 false。这个变量用来控制 Modal 组件是否具有 promo 样式。
  • export let message = 'default message';

    • 声明并导出一个名为 message 的变量,初始值为 ‘default message’。这个变量用于显示传入的消息内容。
{#if showModal}
  <!-- svelte-ignore a11y-click-events-have-key-events -->
  <div class="backdrop" class:promo={isPromo} on:click|self>
    <div class="modal">
      <p>{message}</p>
    </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 元素,用于显示模态框的内容。
  • <p>{message}</p>

    • 创建一个 p 元素,内容为 message 变量的值。

以上代码展示了如何在 Svelte 中使用 Event Modifiers 来简化事件处理,增强事件行为的控制。通过 once 修饰符,按钮的点击事件处理器只执行一次,而通过 self 修饰符,只有在点击模态框的背景时才会触发关闭事件。

App.svelte 完整代码


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

  </script>
  
  <Modal message='Hello, Ninjas!' {showModal} on:click={toggleModal} />
  <main>
	<button on:click|once={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;
    export let message = 'default message';
  </script>
  
  {#if showModal}
    <!-- svelte-ignore a11y-click-events-have-key-events -->
    <div class="backdrop" class:promo={isPromo} on:click|self>
      <div class="modal">
        <p>{message}</p>
      </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/676180.html

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

相关文章

玄机科技再度引领国漫风潮,携手百度文库共创AI动漫新纪元

在5月30日举办的百度移动生态万象大会上&#xff0c;国内知名动画制作及运营企业玄机科技受邀出席&#xff0c;并与百度文库达成重要战略合作&#xff0c;共同探索AI技术在动漫领域的应用&#xff0c;开启智能动漫解决方案的新篇章。此次合作不仅展现了玄机科技在动画制作领域的…

攻防世界maze做法(迷宫题)

首先查壳64bit&#xff0c;直接丢进ida64中进行反编译就完事儿了&#xff0c;然后直接进入main函数打注释分析首先&#xff0c;题目已经提示了这是个迷宫题&#xff0c;我们抓住做迷宫题的两个要点&#xff0c;一找玩法&#xff0c;二找地图&#xff0c; 玩法在主函数中&#…

【代码随想录】【算法训练营】【第27天】 [39]组合总和 [40] 组合总和II [131]分割回文串

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day26&#xff0c; 休息的周末~ day 27&#xff0c;周一&#xff0c;库存没了&#xff0c;哭死~ 题目详情 [39] 组合总和 题目描述 39 组合总和 解题思路 前提&#xff1a;组合的子集问题&…

上位机图像处理和嵌入式模块部署(f103 mcu获取唯一id)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于stm32f103系列mcu来说&#xff0c;一般每一颗原厂的mcu&#xff0c;都会对应一个唯一的id。那这个id可以用来做什么用呢&#xff1f;个人认为&…

【电子通识】什么是电力电子

什么是电力电子 在日常生活中&#xff0c;电能变换的需求无处不在。比如给手机充电&#xff0c;充电器从插座220V交流电取电并转换为手机电池所需的5V或者其他幅度的直流电输送给手机&#xff0c;这就完成了最简单的AC-DC电能转换。除此之外&#xff0c;还有空调、电视、新能源…

LLM主流开源代表模型

LLM主流开源大模型介绍 1 LLM主流大模型类别 随着ChatGPT迅速火爆&#xff0c;引发了大模型的时代变革&#xff0c;国内外各大公司也快速跟进生成式AI市场&#xff0c;近百款大模型发布及应用。 目前&#xff0c;市面上已经开源了各种类型的大语言模型&#xff0c;本章节我们…

【数据结构】详解堆的基本结构及其实现

文章目录 前言1.堆的相关概念1.1堆的概念1.2堆的分类1.2.1小根堆1.2.2大根堆 1.3堆的特点堆的实用场景 2.堆的实现2.1初始化2.2插入2.3堆的向上调整2.4删除2.5堆的向下调整2.6判空2.7获取堆顶元素2.8销毁 3.堆排序3.1实现3.2堆排序的时间复杂度问题 前言 在上一篇文章中&#…

大模型时代的具身智能系列专题(七)

北大王鹤团队 王鹤&#xff0c;北京大学前沿计算研究中心助理教授&#xff0c;本科毕业于清华大学&#xff0c;博士毕业于斯坦福大学&#xff0c;师从美国三院院士Leonidas. J Guibas教授。他创立并领导了具身感知与交互实验室(EPIC Lab)&#xff0c;实验室立足三维视觉感知与…

怎么控制员工电脑的文件外发,六个控制文件外发的小窍门你必须了解

控制员工电脑的文件外发是企业信息安全管理中的重要环节&#xff0c;旨在防止敏感数据泄露、保护知识产权和维护商业秘密。 企业可以通过多种技术和管理措施相结合的方式来达到这一目的&#xff0c;确保既有效控制文件外发风险&#xff0c;又不影响正常的业务运作和员工工作效…

Java设计模式——建造者模式

目录 前言 一、什么是建造者模式 二、建造者模式的核心角色 三、建造者模式的优点 四、具体实现 1、抽象建造者类 2、具体建造者类 3、产品类 4、指挥者类 5、客户端代码 总结 前言 在软件工程中&#xff0c;我们经常遇到需要创建复杂对象的情况。这些对象可能由多个…

MongoDB CRUD操作:地理位置查询中的GeoJSON对象

MongoDB CRUD操作&#xff1a;地理位置查询中的GeoJSON对象 文章目录 MongoDB CRUD操作&#xff1a;地理位置查询中的GeoJSON对象Point类型LineString类型Polygon&#xff08;多边形&#xff09;类型单环多边形多环多边形 MultiPoint类型MultiLineString类型MultiPolygon类型Ge…

[FreeRTOS 基础知识] 堆

文章目录 堆的概念使用C语言实现 堆堆空间解析 堆的概念 所谓的堆就是一块空间的内存&#xff0c;可以来管理这块内存。从这块内存中取出一部分然后再释放回去。 使用C语言实现 堆 char heap_buf[1024]; // 定义一个堆空间 int pos0; // 当前…

牛客网刷题 | BC116 [NOIP2013]记数问题

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 试计算在区间1 到n…

C++的vector使用优化

我们在上一章说了如何使用这个vector动态数组&#xff0c;这章我们说说如何更好的使用它以及它是如何工作的。当你创建一个vector&#xff0c;然后使用push_back添加元素&#xff0c;当当前的vector的内存不够时&#xff0c;会从内存中的旧位置复制到内存中的新位置&#xff0c…

pytorch+YOLOv8-1

1.工具开发 2.idea配置pytorch环境 默认安装新版本torch pip install torch 3.pytorch验证 4. print(torch.cuda.is_available()) 输出结果为 False 说明我只能用cpu

【动手学深度学习】softmax回归的简洁实现详情

目录 &#x1f30a;1. 研究目的 &#x1f30a;2. 研究准备 &#x1f30a;3. 研究内容 &#x1f30d;3.1 softmax回归的简洁实现 &#x1f30d;3.2 基础练习 &#x1f30a;4. 研究体会 &#x1f30a;1. 研究目的 理解softmax回归的原理和基本实现方式&#xff1b;学习如何…

prometheus+alertmanager+webhook钉钉机器人告警

版本&#xff1a;centos7.9 python3.9.5 alertmanager0.25.0 prometheus2.46.0 安装alertmanager prometheus 配置webhook # 解压&#xff1a; tar -xvf alertmanager-0.25.0.linux-amd64.tar.gz tar -xvf prometheus-2.46.0.linux-amd64.tar.gz mv alertmanager-0.25.0.linu…

分享毕业论文要怎么写以及写论文工具推荐

毕业论文的写作是一个系统且需要深度研究的过程。以下将分步介绍毕业论文的写作方法&#xff0c;并推荐一些实用的写作工具。 毕业论文写作方法 选题&#xff1a; 确定研究方向和目标&#xff0c;选择具体且有一定研究价值的课题。建议选择应用型题目&#xff0c;结合理论和实…

【HarmonyOS】鸿蒙系统中应用权限等级介绍、定义、申请授权讲解

【HarmonyOS】鸿蒙系统中应用权限等级介绍、定义、申请授权讲解 针对权限等级&#xff0c;相对于主体来说&#xff0c;会有不同的细分概念。 一、权限APL等级&#xff1a; 首先在鸿蒙系统中&#xff0c;对于权限本身&#xff0c;分为三个等级&#xff1a;normal&#xff0c;s…

【JAVA WEB实用与优化技巧】如何使用本地.bat/.sh脚本快速将服务发布到测试环境?

文章目录 普通方式的springboot 使用docker打包发布【手动构建镜像模式】1. maven 打包可运行jar包2.手动打包镜像3.运行容器 全自动化本地命令发布到远程服务的方式配置ssh信任公钥获取公钥git 获取公钥方式: 桌面右键 -> open git gui here -> help -> show SSH key…