前言

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

Alpine.js IntelliSense

智能提示对 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的更多相关文章

  1. [javascript library]使用js实现页面刷新后依然保留表单填写的数据

    详情请见于该链接:http://sisyphus-js.herokuapp.com/

  2. 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 ...

  3. 13个JavaScript图表(JS图表)图形绘制插件【转】

    现在网络上又有越来越多的免费的(JS 图表)JavaScript图表图形绘制插件.我之前给一家网站做过复杂的图形,我们用的是 highchart.在那段时间,没有很多可供选择的插件.但现在不同了,很容 ...

  4. 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 ...

  5. Raphaël—JavaScript Library

    Raphaël-JavaScript Library What is it? Raphaël is a small JavaScript library that should simplify yo ...

  6. 13个JavaScript图表(JS图表)图形绘制插件

    转自:http://blog.jobbole.com/13671/ 1. Flash 过去是最佳解决方案,但很多人多在从那迁移: 2. 现代浏览器及其更强大的计算能力,使其在转化绘制实时数据方面的能力 ...

  7. 使用JavaScript和D3.js实现数据可视化

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由独木桥先生发表于云+社区专栏 介绍 D3.js是一个JavaScript库.它的全称是Data-Driven Documents(数据 ...

  8. JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布

    JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布   研究了一年多的js,也差不多写一个自己的js库了.我写这个不算框架,只是一个小型的js工具 ...

  9. jQuery JavaScript Library v3.2.1

    /*! * jQuery JavaScript Library v3.2.1 * https://jquery.com/ * * Includes Sizzle.js * https://sizzle ...

  10. 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- ...

随机推荐

  1. 在Visual Studio Code中,鼠标双击PHP变量的时候,如何选择包括$在内的整个变量名

    依次点击:文件->首选项->设置 并在"editor.wordSeparators"设置中为您的语言指定删除"$"符号:

  2. 解决阿里云redis监听6379,配置规则也将6379端口开放,但是外网仍无法连接6379的问题

    首先确保阿里云配置规则和服务器防火墙已开发6379端口 阿里云linux安装完成redis,并且已经运行,检测6379端口,显示redis-server正在监听,如图 修改redis.conf配置 将 ...

  3. oeasy教您玩转python - 001 - # 换行插入

    ​ 先跑起来 Python 什么是 Python? Python 很好用 适合初学者 而且在各个领域都很强大 ​ 后来居上 ​ 上图可以点开 python3 早已有之 最终逆风翻盘 当然 java 也 ...

  4. 深入理解Spring Boot:Bean管理、原理解析与Maven高级应用

    深入理解Spring Boot:Bean管理.原理解析与Maven高级应用 前言 大家好,今天我们来聊聊Spring Boot的核心内容,包括Bean管理.Spring Boot的工作原理以及Mave ...

  5. 分享一个idea的文档汉化插件

    展示效果: 如何获取:

  6. 公开号CN117354339A —— 数据传输专利 —— 解决了相关技术在进行数据传输的过程中时效性较差的技术问题

    看到一个新闻: 地址: https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_92907119 ...

  7. 【转载】 pytorch锁死在dataloader(训练时卡死)

    版权声明:本文为CSDN博主「Totoro-wen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/qq_325 ...

  8. B站基于Apache DolphinScheduler的一站式大数据集群管理平台(BMR)初窥

    一.背景 大数据服务是数据平台建设的基座,随着B站业务的快速发展,其大数据的规模和复杂度也突飞猛进,技术的追求也同样不会有止境. B站一站式大数据集群管理平台(BMR),在千呼万唤中孕育而生.本文简单 ...

  9. VUE learn

    Vue .js 的官方文档中是这样介绍它的. 简单小巧的核心,渐进式技术拢,足以应付任何规模的应用. 简单小巧是指 vue.js 压缩后大小仅有 17k .所谓渐进式(Progressive ),就是 ...

  10. SMU Autumn 2023 Round 5

    SMU Autumn 2023 Round 5 A. Everyone Loves to Sleep 把时间都转成分钟,然后存起来,二分找到离他睡觉点最近的一个时间段,减去他的睡觉点,如果最近的在第二 ...