前言

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. css浅谈Flex布局

    1.打开Flex布局 .box{ display: flex; } 2.容器的属性 flex-direction flex-wrap flex-flow justify-content align-i ...

  2. Java异步判断线程池所有任务是否执行完成的方法

    1.使用ExecutorService和CountDownLatch的方法示例 在Java中,当我们使用线程池(如ExecutorService)来执行异步任务时,常常需要知道所有任务是否都已经完成. ...

  3. 使用GSAP制作动画视频

    GSAP 3Blue1Brown给我留下了深刻印象.利用动画制作视频,内容简洁,演示清晰.前两天刚好碰到一件事,我就顺便学习了一下怎么用代码做动画. 以javascrip为例,有两个动画引擎,GSAP ...

  4. thinkphp5 关于跨域的一些坑

    1.首先在tp5的入口文件:public/index.php 在里面添加三行: // [ 应用入口文件 ] header("Access-Control-Allow-Origin:*&quo ...

  5. oeasy教您玩转linux 010216 随机诗词 fortunezh

    我们来回顾一下 上一部分我们都讲了什么? 下载fortune 输出重定向到cowsay 多重输出重定向 fortune的细节 有没有中️文的fortune呢 # 搜索一下fortune apt sea ...

  6. C#/.NET这些实用的编程技巧你都会了吗?

    DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法.算法.技巧.中间件.类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.N ...

  7. 在Django REST framework (DRF) 中,`request.query_params` 和 `request.data` 区别

    在Django REST framework (DRF) 中,request.query_params 和 request.data 都是用来获取请求中的数据,但是它们之间有一些关键的区别: requ ...

  8. pytest + allure2.x 踩坑-报告无数据

    我按照网上的教程,在用pytest生成完allure可以使用的json数据之后,然后再用allure生成报告,打开,发现我生成的报告中没有数据显示. 1.首先我用pytest生成数据是没有问题的 2. ...

  9. 使用 useRequestURL 组合函数访问请求URL

    title: 使用 useRequestURL 组合函数访问请求URL date: 2024/7/26 updated: 2024/7/26 author: cmdragon excerpt: 摘要: ...

  10. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-62 - 判断元素是否可操作

    1.简介 有些页面元素的生命周期如同流星一闪,昙花一现.我们也不知道这个元素在没在页面中出现过,为了捕获这一美好瞬间,让其成为永恒.我们就来判断元素是否显示出现过. 在操作元素之前,可以先判断元素的状 ...