(11)svelte 教程:Forms

(11)svelte 教程:Forms

什么是 Forms

在 Svelte 框架中,Forms 是一种用于处理用户输入数据的机制。通过 Forms,你可以创建各种输入控件,如文本框、复选框、选择框等,以便用户填写并提交数据。Svelte 提供了数据绑定、事件处理等功能,使得处理表单数据变得更加简便和直观。

逐行解释代码

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

    let showModal = false;

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

    • 从当前目录中导入名为 Modal 的 Svelte 组件。
  • import AddPersonForm from './AddPersonForm.svelte';

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

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

    • 声明一个名为 toggleModal 的箭头函数。这个函数的作用是切换 showModal 的值,使其在 truefalse 之间切换。
<Modal {showModal} on:click={toggleModal}>
    <AddPersonForm />
</Modal>
  • <Modal {showModal} on:click={toggleModal}>

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

    • Modal 组件中使用 AddPersonForm 组件,表示在模态框中嵌入一个表单。
<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></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></slot>

    • 创建一个默认插槽。如果父组件提供了插槽内容,则渲染该内容;否则,插槽内容为空。
AddPersonForm.svelte
<script>
    let name;
    let beltColour;
    let age;
    let skills = [];

    const handleSubmit = () => {
      console.log(name, beltColour, age, skills);
    };
</script>
  • let name;

    • 声明一个名为 name 的变量,用于存储用户输入的名字。
  • let beltColour;

    • 声明一个名为 beltColour 的变量,用于存储用户选择的腰带颜色。
  • let age;

    • 声明一个名为 age 的变量,用于存储用户输入的年龄。
  • let skills = [];

    • 声明一个名为 skills 的数组,用于存储用户选择的技能。
  • const handleSubmit = () => { console.log(name, beltColour, age, skills); };

    • 声明一个名为 handleSubmit 的箭头函数,当表单提交时调用此函数,输出用户输入的名字、腰带颜色、年龄和技能。
<form on:submit|preventDefault={handleSubmit}>
    <input type="text" placeholder='name' bind:value={name}>
    <input type="number" placeholder='age' bind:value={age}>
    <label>Skills:</label>
    <input type="checkbox" bind:group={skills} value="fighting">fighting<br>
    <input type="checkbox" bind:group={skills} value="sneaking">sneaking<br>
    <input type="checkbox" bind:group={skills} value="running">running<br>
    <label>Belt colour:</label>
    <select bind:value={beltColour}>
      <option value="black">black</option>
      <option value="orange">orange</option>
      <option value="brown">brown</option>
      <option value="white">white</option>
    </select>
    <button>Add Ninja</button>
</form>
  • <form on:submit|preventDefault={handleSubmit}>

    • 创建一个表单元素,并绑定 submit 事件。当表单提交时调用 handleSubmit 函数,并通过 preventDefault 修饰符阻止默认的表单提交行为(即页面刷新)。
  • <input type="text" placeholder='name' bind:value={name}>

    • 创建一个文本输入框,用于输入名字。通过 bind:value 双向绑定,将用户输入的值赋给 name 变量。
  • <input type="number" placeholder='age' bind:value={age}>

    • 创建一个数字输入框,用于输入年龄。通过 bind:value 双向绑定,将用户输入的值赋给 age 变量。
  • <label>Skills:</label>

    • 创建一个标签,用于描述下面的技能选项。
  • <input type="checkbox" bind:group={skills} value="fighting">fighting<br>

    • 创建一个复选框,用于选择 “fighting” 技能。通过 bind:group 将复选框的值绑定到 skills 数组中。
  • <input type="checkbox" bind:group={skills} value="sneaking">sneaking<br>

    • 创建一个复选框,用于选择 “sneaking” 技能。通过 bind:group 将复选框的值绑定到 skills 数组中。
  • <input type="checkbox" bind:group={skills} value="running">running<br>

    • 创建一个复选框,用于选择 “running” 技能。通过 bind:group 将复选框的值绑定到 skills 数组中。
  • <label>Belt colour:</label>

    • 创建一个标签,用于描述下面的腰带颜色选项。
  • <select bind:value={beltColour}>

    • 创建一个选择框,用于选择腰带颜色。通过 bind:value 将选择框的值绑定到 beltColour 变量。
  • <option value="black">black</option>

    • 创建一个选项,值为 “black”,显示为 “black”。
  • <option value="orange">orange</option>

    • 创建一个选项,值为 “orange”,显示为 “orange”。
  • <option value="brown">brown</option>

    • 创建一个选项,值为 “brown”,显示为 “brown”。
  • `<option

    value=“white”>white`

    • 创建一个选项,值为 “white”,显示为 “white”。
  • <button>Add Ninja</button>

    • 创建一个提交按钮,标签为 “Add Ninja”。

以上代码展示了如何在 Svelte 中使用 Forms 来创建一个带有文本输入框、数字输入框、复选框和选择框的表单。通过数据绑定和事件处理,用户输入的数据可以方便地收集和处理。

App.svelte 完整代码

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

  </script>
  
  <Modal {showModal} on:click={toggleModal}>
	<AddPersonForm />
  </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></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>

AddPersonForm.svelte 完整代码

<script>
    let name;
    let beltColour;
    let age;
    // let fighting = false;
    // let sneaking = false;
    // let running = false;
    let skills = [];
  
    const handleSubmit = () => {
      console.log(name, beltColour, age, skills);
    };
  </script>
  
  <form on:submit|preventDefault={handleSubmit}>
    <input type="text" placeholder='name' bind:value={name}>
    <input type="number" placeholder='age' bind:value={age}>
    <!-- svelte-ignore a11y-label-has-associated-control -->
    <label>Skills:</label>
    <!-- <input type="checkbox" bind:checked={fighting}>fighting<br>
    <input type="checkbox" bind:checked={sneaking}>sneaking<br>
    <input type="checkbox" bind:checked={running}>running<br> -->
    <input type="checkbox" bind:group={skills} value="fighting">fighting<br>
    <input type="checkbox" bind:group={skills} value="sneaking">sneaking<br>
    <input type="checkbox" bind:group={skills} value="running">running<br>
    <!-- svelte-ignore a11y-label-has-associated-control -->
    <label>Belt colour:</label>
    <select bind:value={beltColour}>
      <option value="black">black</option>
      <option value="orange">orange</option>
      <option value="brown">brown</option>
      <option value="white">white</option>
    </select>
    <button>Add Ninja</button>
  </form>

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

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

相关文章

YOLOv9改进策略 | 添加注意力篇 | 利用YOLOv10提出的PSA注意力机制助力YOLOv9有效涨点(附代码 + 详细修改教程)

一、本文介绍 本文给大家带来的改进机制是YOLOv10提出的PSA注意力机制&#xff0c;自注意力在各种视觉任务中得到了广泛应用&#xff0c;因为它具有显著的全局建模能力。然而&#xff0c;自注意力机制表现出较高的计算复杂度和内存占用。为了解决这个问题&#xff0c;鉴于注意…

群体优化算法---蝙蝠优化算法分类Iris数据集

介绍 蝙蝠算法&#xff08;Bat Algorithm, BA&#xff09;是一种基于蝙蝠回声定位行为的优化算法。要将蝙蝠算法应用于分类问题&#xff0c;可以通过将蝙蝠算法用于优化分类器的参数&#xff0c;图像分割等 本文示例 我们使用一个经典的分类数据集&#xff0c;如Iris数据集&…

基于深度学习的CT影像肺癌检测识别

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 肺癌是全球范围内导致癌症死亡的主要原因之一&#xff0c;早期检测和诊断对于提高患者生存率至关重要。随着深度学习技术的迅猛发展&#xff0c;基于CT影像的肺癌检测识别成为了研究热点。本文介绍…

Spire.PDF for .NET【文档操作】演示:在 C# 中向 PDF 文件添加图层

Spire.PDF 完美支持将多页 PDF 拆分为单页。但是&#xff0c;更常见的情况是&#xff0c;您可能希望提取选定的页面范围并保存为新的 PDF 文档。在本文中&#xff0c;您将学习如何通过 Spire.PDF 在 C#、VB.NET 中根据页面范围拆分 PDF 文件。 Spire.PDF for .NET 是一款独立 …

wireshark 二次开发

一、 Windows 准备 1、源代码下载 Git&#xff1a;https://github.com/wireshark/wireshark 2、 准备Visual C 要编译wireshark&#xff0c;开发电脑上应该安装了Visual Studio并包括了Visual C&#xff0c;请至少安装Visual Studio 2010以减少不必要的麻烦。 visual studio …

英码科技推出鸿蒙边缘计算盒子:提升国产化水平,增强AI应用效能,保障数据安全

当前&#xff0c;随着国产化替代趋势的加强&#xff0c;鸿蒙系统Harmony OS也日趋成熟和完善&#xff0c;各行各业都在积极拥抱鸿蒙&#xff1b;那么&#xff0c;边缘计算要加快实现全面国产化&#xff0c;基于鸿蒙系统开发AI应用势在必行。 关于鸿蒙系统及其优势 鸿蒙系统是华…

友顺科技(UTC)分立器件与集成IC产品选型和应用

友顺科技股份有限公司成立于1990年&#xff0c;是全球领先的集成电路与功率半导体厂商 ,集团总部位于台北&#xff0c;生产基地位于福州、厦门。 友顺科技具有完整模拟组件产品线&#xff0c;其中类比IC涵盖各种稳压器、PWM控制IC, 放大器、比较器、逻辑IC、Voltage Translato…

Pulsar 社区周报 | No.2024-05-30 | BIGO 百页小册《Apache Pulsar 调优指南》

“ 各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar 社区周报更新啦&#xff01;这里将记录 Pulsar 社区每周的重要更新&#xff0c;每周发布。 ” BIGO 百页小册《Apache Pulsar 调优指南》 Hi&#xff0c;Apache Pulsar 社区的小伙伴们&#xff0c;社区 2024 上半年度的有奖问…

VB.net实战(VSTO):Excel插件设计Ribbon界面

1. 新建Ribbon 1.1 开发环境 Visual Studio 2022 1.2 解决方案资源管理器中右击My Project 1.3 添加》新建项 1.4 office/SharePoint》功能区(可视化设计器)&#xff0c;双击 2.调出工具箱 Visual Studio 2022》视图》工具箱 3.设计界面 3.1 添加功能区选项卡 3.2拖动Group…

OZON的选品工具,OZON选品工具推荐

在电商领域&#xff0c;选品一直是决定卖家成功与否的关键因素之一。随着OZON平台的崛起&#xff0c;越来越多的卖家开始关注并寻求有效的选品工具&#xff0c;以帮助他们在这个竞争激烈的市场中脱颖而出。本文将详细介绍OZON的选品工具&#xff0c;并推荐几款实用的辅助工具&a…

【嵌入式DIY实例】-OLED显示网络时钟和天气数据

OLED显示网络时钟和天气数据 文章目录 OLED显示网络时钟和天气数据1、硬件准备与接线2、代码实现在前面的的文章中,我们制作了一个互联网气象站,其中天气数据(温度、湿度、压力、风速和风度)被串行发送到笔记本电脑并显示在SSD1306 OLED屏幕(12864像素)上。 在该项目中,…

麦肯锡:ChatGPT等生成式AI应用激增,大中华区增长最快

全球顶级咨询公司麦肯锡&#xff08;McKinsey & Company&#xff09;在官网发布了《he state of AI in early 2024:Gen AI adoption spikes and starts to generate value》&#xff0c;一份关于生成式AI应用的调查报告。 麦肯锡对多个国家/地区的1,363位管理者进行了调查…

6个PPT素材模板网站,免费!

免费PPT素材模板下载&#xff0c;就上这6个网站&#xff0c;建议收藏&#xff01; 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库是一个设计、办公、媒体等素材非常齐全的网站&#xff0c;站内有几百万的素材&#xff0c;其中PPT模板就有几十万个&#xff0c;…

vulnhub靶机Hack_Me_Please

下载地址&#xff1a;https://download.vulnhub.com/hackmeplease/Hack_Me_Please.rar 主机发现 目标192.168.21.160 端口扫描 nmap --min-rate 10000 -p- 192.168.21.160 服务扫描 nmap -sV -sT -O -p80,3306,33060 192.168.21.160 漏洞扫描 nmap --scriptvuln -p80,3306,…

论文Compiler Technologies in Deep Learning Co-Design: A Survey分享

目录 标题摘要引言背景深度学习软件和硬件的发展不同时期的协同设计深度学习协同设计系统神经网络架构设计和优化协同设计技术 用于协同设计的深度学习系统中的编译技术深度学习编译器TVM 生态系统和MLIR生态系统IR转换和优化代码生成运行时和执行模式 Buddy-Compiler: 一个针对…

(软工) 功能性和非功能性需求是什么?

文章目录 前言&#x1f31f;功能性需求⭐⭐⭐系统应该做什么&#xff1f;或者应该提供什么功能&#xff1f;⭐⭐⭐&#x1faf0;举例 &#x1f31f;非功能性需求⭐⭐⭐系统应该在哪些条件下能执行这些功能&#xff0c;且执行的很好。⭐⭐⭐❤️‍&#x1f525;质量属性(Quality…

(2024|ICML,Mamba2,SSD,SSM,SMA,矩阵变换,张量收缩,张量并行)Transformer 是 SSM

Transformers are SSMs: Generalized Models and Efficient Algorithms Through Structured State Space Duality 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 引言 2. …

SQL实验 数据的插入、修改和删除操作

一、实验目的 1&#xff0e;掌握Management Studio的使用。 2&#xff0e;掌握SQL中INSERT、UPDATE、DELETE命令的使用。 二、实验内容及要求 用SQL语句完成下列功能。使用数据库为SCHOOL数据库。 1、新开设一门课程&#xff0c;名叫网络安全与防火墙&#xff0c;学时40&#x…

Leetcode - 周赛400

目录 一&#xff0c;3168. 候诊室中的最少椅子数 二&#xff0c;3169. 无需开会的工作日 三&#xff0c;3170. 删除星号以后字典序最小的字符串 四&#xff0c;3171. 找到按位与最接近 K 的子数组 一&#xff0c;3168. 候诊室中的最少椅子数 本题是一道模拟题&#xff0c;直…

Bootstrap框架最新V5 快速入门直通

目录 Bootstrap - 前言 Bootstrap - 下载 Bootstrap - 使用 Bootstrap - 学习 Bootstrap - 栅格系统 Bootstrap - 全局样式 Bootstrap - 组件(Coponents) Bootstrap - 字体图标 Bootstrap - 前言 Bootstrap是由Twitter公司开发维护的前端UI框架&#xff0c;它提供了大量…