JavaScript Library – Alpine.js
前言
Alpine 是高山的意思。Alpine.js 是一个轻量级的 JS Framework。
我为什么会去用它呢?
是这样的,我在做企业网站开发的时候会有 2 个阶段。
第一个 draft 阶段,只写 HTML、CSS、JS。不会涉及 ASP.NET Core、SQL Server。
第二个阶段就是 final,会引入 ASP.NET Core、SQL Server 等等。
为什么要分 2 个阶段呢?顾名思义 draft 嘛,就是还需要被修改的。有时候内容甚至是 lorem...
不用 ASP.NET Core 怎么跑呢?首先是利用 Vite 做 server。然后再配上一个 template engine 就替代掉了 Razor。
这个 template engine 就是 Alpine.js 了。这篇就是记入一下基本的使用方法。
Get Started
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
直接放到 HTML 里头。上古时代的引入方式。非常干脆。
<div class="container" x-data="{ firstName: 'Derrick' }">
<h1 x-text="firstName"></h1>
</div>
x-data 类似于声明一个 variable
x-text 则是把 variable 写入 h1
<button x-on:click="firstName = 'Alex'">change name</button>
监听 click 事件,然后修改 variable。
整体效果

它有点像十几年前的 Angular.js,主要就是搞 MVVM。我觉得如果你像我这样只是要搞 MVVM 在 dev 情况下,Alpine.js 是首选 framework。
VS Code

智能提示对 DX 是很重要的,幸好有插件。
配搭 TypeScript
yarn add alpinejs
yarn add @types/alpinejs --dev
global.d.ts
import { Alpine } from 'alpinejs';
declare global {
interface Window {
Alpine: Alpine;
}
}
index.ts
import Alpine from 'alpinejs';
window.Alpine = Alpine;
Alpine.start();
About Render & Re-render
Alpine 在 page load 的时候会 scan HTML。有 x-data 或 x-init 的 element 会被 render。
动态插入 element 时,Alpine 也会知道(估计它用了 MutationObserver),所以会 re-render。
但是 MutationObserver 会慢半拍,如果我们想对 render 后的 DOM 做操作,那最好是自己 manual call re-render。
const html = `
<ul x-data="{ colors: ['Red', 'Orange', 'Yellow'] }">
<template x-for="(color, index) in colors">
<li>
<span x-text="index + ': '"></span>
<span x-text="color"></span>
</li>
</template>
</ul>
`; setTimeout(() => {
document.querySelector<HTMLElement>('.container')!.innerHTML = html;
Alpine.initTree(document.querySelector<HTMLElement>('.container')!); // re-render
alert(document.querySelectorAll('li').length); // 3
}, 1000);
x-for
<ul x-data="{ colors: ['Red', 'Orange', 'Yellow'] }">
<template x-for="(color, index) in colors">
<li>
<span x-text="index + ': '"></span>
<span x-text="color"></span>
</li>
</template>
</ul>
x-data 声明变量。x-for 配上 template 做 looping。
注: x-for,x-if 内只能有一个 root element,这个局限非常糟糕。
JavaScript Library – Alpine.js的更多相关文章
- [javascript library]使用js实现页面刷新后依然保留表单填写的数据
详情请见于该链接:http://sisyphus-js.herokuapp.com/
- Dynamices CRM JS 类库 神器 XrmServiceToolkit - A Microsoft Dynamics CRM 2011 & CRM 2013 JavaScript Library
XrmServiceToolkit - A Microsoft Dynamics CRM 2011 & CRM 2013 JavaScript Library http://xrmservic ...
- 13个JavaScript图表(JS图表)图形绘制插件【转】
现在网络上又有越来越多的免费的(JS 图表)JavaScript图表图形绘制插件.我之前给一家网站做过复杂的图形,我们用的是 highchart.在那段时间,没有很多可供选择的插件.但现在不同了,很容 ...
- A javascript library providing cross-browser, cross-site messaging/method invocation. http://easyxdm.net
easyXDM - easy Cross-Domain Messaging easyXDM is a Javascript library that enables you as a develope ...
- Raphaël—JavaScript Library
Raphaël-JavaScript Library What is it? Raphaël is a small JavaScript library that should simplify yo ...
- 13个JavaScript图表(JS图表)图形绘制插件
转自:http://blog.jobbole.com/13671/ 1. Flash 过去是最佳解决方案,但很多人多在从那迁移: 2. 现代浏览器及其更强大的计算能力,使其在转化绘制实时数据方面的能力 ...
- 使用JavaScript和D3.js实现数据可视化
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由独木桥先生发表于云+社区专栏 介绍 D3.js是一个JavaScript库.它的全称是Data-Driven Documents(数据 ...
- JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布
JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布 研究了一年多的js,也差不多写一个自己的js库了.我写这个不算框架,只是一个小型的js工具 ...
- jQuery JavaScript Library v3.2.1
/*! * jQuery JavaScript Library v3.2.1 * https://jquery.com/ * * Includes Sizzle.js * https://sizzle ...
- A JavaScript library for reading EXIF meta data from image files.
exif-js/exif-js: JavaScript library for reading EXIF image metadata https://github.com/exif-js/exif- ...
随机推荐
- Sql Server 按日统计产量
碰到一个这样的需求,需要查询每天的产量,直接 group 是可以分出不同天的产量,但是如果当天没有生产,就会少一条那一天的记录,而不是那一天显示产量为0,这样不方便前端显示曲线. 于是找到下面的办法, ...
- js需要同时发起百条接口请求怎么办?--通过Promise实现分批处理接口请求
如何通过 Promise 实现百条接口请求? 实际项目中遇到需要发起上百条Promise接口请求怎么办? 前言 不知你项目中有没有遇到过这样的情况,反正我的实际工作项目中真的遇到了这种玩意,一个接口获 ...
- [oeasy]python017_万行代码之梦_vim环境_复制粘贴
继续运行 回忆上次内容 上次 保存运行一条龙 :w|!python3 % 我想 再多输出 几行 增加一下 代码量 可以吗? 添加图片注释,不超过 140 字(可选) 代码量 在正常模式 ...
- [oeasy]python0029_放入系统路径_PATH_chmod_程序路径_执行原理
放入路径 回忆上次内容 上次总算可以把 sleep.py 直接执行了 sleep.py文件头部要声明好打开方式 #!/usr/bin/python3 用的是 python3 解释 sleep.py ...
- 如何用 WinDbg 调试Linux上的 .NET程序
一:背景 1. 讲故事 最新版本 1.2402.24001.0 的WinDbg真的让人很兴奋,可以将自己伪装成 GDB 来和远程的 GDBServer 打通来实现对 Linux 上 .NET程序进行调 ...
- 【MongoDB】Re01 安装与基础操作
Linux安装 官网下载红帽安装版 #下载三个rpm包 wget https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el7-4.2/RPMS/mongo ...
- 【郝斌C ST】01
自学视频<郝斌C语言自学教程> 01 - 09: https://www.bilibili.com/video/BV1os411h77o 1.为什么学习C语言? - C的起源和发展 第一 ...
- 老版本mujoco: mujoco 1.31 1.40 1.50 2.00 版本下载地址
下载地址: https://www.roboti.us/download.html 激活码下载地址: https://www.roboti.us/file/mjkey.txt 安装教程: https: ...
- 这篇 DolphinScheduler on k8s 云原生部署实践,值得所有大数据人看!
在当前快速发展的技术格局中,企业寻求创新解决方案来简化运营并提高效率成为一种趋势. Apache DolphinScheduler作为一个强大的工具,允许跨分布式系统进行复杂的工作流任务调度.本文将深 ...
- java如何保证一个方法只能执行一次
我们经常会遇到一些情况需要某一个方法或者操作只执行一次,比如说配置信息加载,如果配置信息需要动态刷新,这个不在适用范围.下面列举几种方式 第一种 如果是web容器,可以使用servlet或者Liste ...