【前端】Svelte:核心语法和组件基础

本教程将详细介绍 Svelte 的核心语法和组件基础,包括 <script><style> 和 HTML 模板的使用方法。我们将通过实例掌握双向数据绑定、条件渲染、循环等基本语法,最后编写简单的交互式组件。

Svelte 组件机制

Svelte 使用组件化结构来组织代码。每个 .svelte 文件就是一个组件,包含 <script><style> 和 HTML 模板块,分别用于编写 JavaScript 逻辑、CSS 样式和 HTML 结构。组件之间的逻辑与样式是分离的,但每个组件的 CSS 默认作用于组件自身。

组件文件结构

每个 .svelte 文件由以下三个主要部分组成:

  • <script>:编写 JavaScript 逻辑,包括定义变量、函数、导入模块等。
  • <style>:编写组件的 CSS 样式。Svelte 会将样式作用域限定在当前组件,不会影响全局样式。
  • HTML 模板:用于描述组件的 HTML 结构。可以在模板中插入变量、条件渲染、循环等。
<!-- App.svelte -->
<script>let name = 'Svelte';
</script><style>h1 {color: #ff3e00;}
</style><main><h1>Hello {name}!</h1>
</main>

在这个示例中,组件会显示一个 “Hello Svelte!” 标题,并将标题颜色设置为橙色。

基础语法和数据绑定

单向数据绑定

Svelte 提供了简单的绑定机制,只需在 HTML 中插入 {} 即可将变量绑定到视图。通过单向绑定,视图会随变量的更新而自动刷新。

<script>let count = 0;
</script><button on:click={() => count += 1}>Clicked {count} times
</button>

每次点击按钮,count 会增加 1,视图会自动更新显示点击次数。

双向数据绑定

Svelte 提供了 bind: 语法用于实现双向数据绑定。可以将输入框的内容和变量绑定,使输入的内容实时更新到变量中。

<script>let name = '';
</script><input bind:value={name} placeholder="Enter your name" />
<p>Your name is {name}</p>

在这个示例中,每当输入框内容变化时,name 变量会自动更新,且会实时显示在段落中。

条件渲染和循环渲染

条件渲染({#if ...}

Svelte 支持使用 {#if} 块进行条件渲染。可以根据条件动态显示或隐藏某些内容。

<script>let isLoggedIn = false;function toggleLogin() {isLoggedIn = !isLoggedIn;}
</script><button on:click={toggleLogin}>{#if isLoggedIn}Logout{:else}Login{/if}
</button>
<p>{isLoggedIn ? "Welcome back!" : "Please log in."}</p>

这里通过点击按钮改变 isLoggedIn 的状态,以动态显示 “Login” 或 “Logout” 文案。

循环渲染({#each ...}

Svelte 的 {#each} 块可以遍历数组并渲染每一项。适用于动态展示列表。

<script>let items = ['Apple', 'Banana', 'Orange'];
</script><ul>{#each items as item}<li>{item}</li>{/each}
</ul>

上面的代码会生成一个列表,每个水果名都将显示在一个 li 元素中。

事件绑定和交互式组件

事件绑定

Svelte 提供了简洁的事件绑定语法,通过 on: 指令可以轻松绑定事件。

<script>let message = '';function handleClick() {message = 'Button clicked!';}
</script><button on:click={handleClick}>Click me</button>
<p>{message}</p>

在这个示例中,点击按钮后,message 的内容会更新为 “Button clicked!”。

双向绑定的输入组件

使用 bind: 实现输入框的双向绑定,可以创建一个交互式输入组件。

<script>let username = '';
</script><input bind:value={username} placeholder="Enter your username" />
<p>Hello, {username || 'Guest'}!</p>

当用户在输入框中键入时,username 变量实时更新,页面上的文本也会动态改变。

简单的交互式组件示例

我们可以利用以上语法,编写一个包含按钮和输入框的交互式组件,让用户可以输入信息并点击按钮来更新显示内容。

<script>let name = '';let greeting = '';function greet() {greeting = `Hello, ${name}!`;}
</script><style>button {margin-top: 10px;padding: 5px 10px;background-color: #6200ea;color: #fff;border: none;border-radius: 3px;cursor: pointer;}
</style><input bind:value={name} placeholder="Enter your name" />
<button on:click={greet}>Greet</button>
<p>{greeting}</p>

在这个示例中:

  1. 输入框通过 bind:value 实现双向数据绑定。
  2. 点击按钮后触发 greet 函数,更新 greeting 文本并显示。

通过该交互组件,用户可以输入名称并点击按钮,页面会显示相应的问候信息。

总结

在本教程中,我们学习了 Svelte 的组件机制、单向和双向数据绑定、条件渲染和循环渲染,还编写了简单的交互式组件。通过这些基础语法和功能,已经可以构建动态的交互界面。掌握这些内容之后,您可以进一步学习 Svelte 的 Store 状态管理、路由等高级特性,创建更复杂的应用。

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

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

相关文章

Javaweb-book书籍借阅系统-开源计划-起源-003

效果视频&#xff1a; https://www.bilibili.com/video/BV1w5m6YkEW3/?spm_id_from333.999.0.0项目地址&#xff1a; https://gitee.com/lucky-six/Javaweb-book

基于springboot+vu的二手车交易系统(全套)

一、系统架构 前端&#xff1a;vue | element-ui | html 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql | maven | nodejs 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页2 03. web端-注册 04. web端-登录 05. w…

系统架构师2023版:习题

架构设计基础 计算机基础 目前处理器市场中存在 CPU 和 DSP 两种类型的处理器&#xff0c;分别用于不同的场景&#xff0c;这两种处理器具有不同的体系结构&#xff0c;DSP采用()。 A.冯诺依曼结构 B.哈佛结构 C.FPGA 结构 D.与 GPU 相同的结构 解析:…

C++ | Leetcode C++题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; class Solution { public:static constexpr int MOD 1000000007;vector<vector<long>> pow(vector<vector<long>> mat, int n) {vector<vector<long>> ret {{1, 0, 0, 0, 0, 0}};while (n > 0) {…

Vue.js开发基础——数据绑定/响应式数据绑定

一、单文件组件 一个基本的单文件组件&#xff1a; &#xff08;三个标签顺序可随意更改&#xff09; <template> <!-- 此处编写组件的结构 --> </template> <script> /* 此处编写组件的逻辑 */ </script> <style> /* 此处编写组件的样…

智能化SCRM方案助力企业高效管理与营销转型

内容概要 现代企业面临着复杂多变的市场环境&#xff0c;传统的管理与营销方式常常无法满足日益增长的需求。这时&#xff0c;智能化SCRM方案便应运而生&#xff0c;为企业带来了新的机遇与挑战。智能化SCRM方案不仅仅是一个单一的工具&#xff0c;它更像是一个全面的解决方案…

Axure是什么软件?全方位解读助力设计入门

在产品设计和开发领域&#xff0c;Axure是一款大名鼎鼎且功能强大的软件&#xff0c;它为专业人士和团队提供了卓越的设计支持&#xff0c;帮助他们将创意转化为实际可操作的产品原型。 一、Axure 的基本介绍 Axure是一款专业的原型设计工具&#xff0c;主要用于创建交互式的…

交流电压1000V以上但不超过35KV的交流调速电气传动系统额定值规定

交流电压1000V以上但不超过35KV的交流调速电气传动系统的额定值规定&#xff0c;主要遵循国家标准GB/T 12668.4-2006《调速电气传动系统 第4部分&#xff1a;一般要求 交流电压1000V以上但不超过35kV的交流调速电气传动系统额定值的规定》。以下是该标准的一些关键内容和要点&a…

Spring-Day8

AOP通知 前置通知Befor&#xff1a;目标方法之前执行 Aspect // 标记为了切面类 Component // 必须声明为 Spring 的 bean public class LogAspect {// 实现方法用时 切点表达式// 前置通知Before("execution(* com.example.c4_aop.UserService.*(..) )")public void…

Vue3 -- 新组件【谁学谁真香系列6】

Teleport Teleport是什么?–Teleport是一种能够将我们的组件html结构移动到指定位置的技术。 父组件: <template><div calss="outer"><h2>我是App组件</h2><img src="https://z1.ax1x.com/2023/11/19/piNxLo4.jpg" alt=&qu…

go语言中的接口含义和用法详解

在Go语言中&#xff0c;接口&#xff08;interface&#xff09;是一种抽象类型&#xff0c;它定义了一组方法签名而不实现具体的方法。接口在Go语言中起到了类似于其他语言中“面向接口编程”的作用&#xff0c;是实现多态和解耦的重要工具。以下是Go中接口的含义及其用法的详细…

【ShuQiHere】️`adb kill-server` 和 `adb start-server` 命令的作用

&#x1f4df;&#x1f527; 【ShuQiHere】️ &#x1f527;&#x1f4df; 在使用 scrcpy 或其他依赖于 ADB&#xff08;Android Debug Bridge&#xff09; 的工具时&#xff0c;您可能会遇到需要重启 ADB 服务器的情况。今天&#xff0c;我们将详细解释两个常用的 ADB 命令&a…

linux之文件(上)

linux之文件&#xff08;上&#xff09; 一.文件的预备知识二.C语言的文件接口和linux的系统接口2.1fopen2.2fclose2.3open2.4close2.5write2.6read 三.文件与系统3.1文件描述符3.2 标准输入&#xff0c;标准输出和标准错误3.3fd的分配规则 四.重定向4.1重定向的概念4.2重定向的…

CSS的配色

目录 1 十六进制2 CSS中的十六进制2.1 十六进制颜色的基本结构2.2 十六进制颜色的范围2.3 简写形式2.4 透明度 3 CSS的命名颜色4 配色4.1 色轮4.2 互补色4.3 类似色4.4 配色工具 日常在开发小程序中&#xff0c;客户总是希望你的配色是美的&#xff0c;但是美如何定义&#xff…

YOLOv11融合[ECCV2024]自调制特征聚合SMFA模块及相关改进思路|YOLO改进最简教程

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《SMFANet: A Lightweight Self-Modulation Feature Aggregation Network for Efficient Image Super-Resolution》 一、 模块介绍 论文链接&#xff1…

数据库SQLite的使用

SQLite是一个C语言库&#xff0c;实现了一个小型、快速、独立、高可靠性、功能齐全的SQL数据库引擎。SQLite文件格式稳定、跨平台且向后兼容。SQLite源代码属于公共领域(public-domain)&#xff0c;任何人都可以免费将其用于任何目的。源码地址&#xff1a;https://github.com/…

【大模型】Spring AI Alibaba 对接百炼平台大模型使用详解

目录 一、前言 二、Spring AI概述 2.1 spring ai是什么 2.2 Spring AI 核心能力 2.3 Spring AI 应用场景 三、Spring AI Alibaba 介绍 3.1 Spring AI Alibaba 是什么 3.2 Spring AI Alibaba 核心特点 3.3 Spring AI Alibaba 应用场景 四、SpringBoot 对接Spring AI Al…

Java:HTTP/HTTPS

HTTP HTTP(全称"超文本传输协议")是一种应用最广泛的应用层协议; 文本=>字符串 超文本:可以传输文本,图片,语言等等其他的各种数据... HTTP各种应用场景: 1.使用浏览器打开网页; 2.打开手机APP; 3.后端程序,都是"分布式/微服务"体系结构; HTTPS可…

android studio 把unversioned文件加入git

在Android Studio中把未版本化的文件纳入Git版本控制&#xff0c;你可以按照以下步骤操作&#xff1a; 打开Android Studio。 打开你的项目。 在项目视图中&#xff0c;右键点击你想要添加的未版本化的文件或文件夹。 在上下文菜单中选择"Add to VCS" -> "…

【Promise】JS 异步之宏队列与微队列

文章目录 1 原理图2 说明3 相关面试题3.1 面试题13.2 面试题23.3 面试题33.4 面试题4 1 原理图 2 说明 JS 中用来存储待执行回调函数的队列包含 2 个不同特定的队列&#xff1a;宏队列和微队列。宏队列&#xff1a;用来保存待执行的宏任务(回调)&#xff0c;比如&#xff1a;定…