Web前端开发网

fly63.com

首页 资源 工具 文章 教程 栏目
  • 关于我们
  • 网站投稿
  • 赞助一下

关闭

搜索

在线工具_工作生活好帮手

打造各种简单、易用、便捷的在线工具,网友无需注册和下载安装即可使用

点击查看

资源分类

AI智能 酷站推荐 招聘/兼职 框架/库 模块/管理 移动端UI框架 Web-UI框架 Js插件 Jquery插件 CSS相关 IDE环境 在线工具 图形动效 游戏框架 node相关 调试/测试 在线学习 社区/论坛 博客/团队 前端素材 图标/图库 建站资源 设计/灵感 IT资讯
提交资源 / 链接反馈

Alpine.js

分享
复制链接
新浪微博
QQ 好友

扫一扫分享

网站地址:https://alpinejs.dev
GitHub:https://github.com/alpinejs/alpine
网站描述:提供大型框架诸如Vue、React等的反应性和声明性的组件化开发框架
访问官网 GitHub

什么是Alpine.Js?

根据项目作者Caleb Porzio的说法:

“ Alpine.js以较低的成本为您提供了大型框架(如vue或react)的反应性和声明性,您可以保留自己的dom,并按自己认为合适的方式进行行为。”

Alpine.js提供大型框架诸如Vue、React等的反应性和声明性的组件化开发框架,可保留自己的DOM并按照自定义最合适的方式操作行为。

Alpine.js可理解JavaScript的Tailwind,Alpine.js中的Alpine意为阿尔卑斯山。

Alpine的语法几乎完全来自Vue.js,共有13条指令,可用于快速构建应用。

Alpine.js和Vue、jquery一样,无需任何构建过程。与Vue不同之处在于Alpine胡hi初始化自身,因此无需创建实例,只需加载即可。


特性

Alpine创造者Caleb Poizio称Alpine.js提供了“疯狂的小尺寸功能,无需安装npm”。

  • 没有虚拟DOM可以接管DOM
  • 极简 不适用于大型SPA单页应用程序
  • 灵活 单独JS文件

安装

Github地址

https://github.com/alpinejs/alpine

CDN地址

<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js" defer></script>

NPM安装

$ npm i -S alpinejs

指令

Alpine.js语法借鉴之Vue.js,以指令为基础,指令以x-开头。

指令描述
x-data声明一个新的组件范围
x-init当一个组件被初始化时运行指定的表达式,类似Vue中的mounted在组件挂载到DOM后触发。
x-bind将属性值设置为JS表达式的结果
x-model为元素添加双向绑定,使输入元素与组件数据保持同步。
x-text工作原理类似x-bind不同之处会更新元素的innerText属性
x-html工作元素类似x-bind不同之处会更新元素的innerHTML属性
x-ref快捷地从组件中获取元素的DOM元素
x-on为元素添加一个事件监听器,在触发监听事件后执行JS表达式。
x-if从DOM中完全删除一个元素,需在<template>标记上使用。
x-show根据表达式的布尔值在元素上切换display:none/block属性值
x-for遍历数组,为象每个数组项目创建新的DOM节点,需在<template>标记中使用。
x-transition元素过渡指令
x-clock在Alpine初始化时将被移除,用于隐藏预初始化的DOM。
类别指令
文本渲染x-text、x-html
双向绑定x-model
条件渲染x-if、x-show
列表渲染x-for
事件监听x-on、@
初始化x-init
转场x-transition


x-data

x-data指令用于声明一个新的组件的作用域范围,类似Vue组件中的data属性。

例如:点击显示隐藏

<div x-data="{show:false}">
  <button x-on:click="show = true">点击</button>
  <div x-show="show" x-on:click.way="show = false">显示区域</div>
</div>

将数据与行为提取到可重用的函数中

<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js" defer></script>

<div x-data="dropdown()">
  <button x-on:click="open">打开</button>
  <div x-show="isOpen()" x-on:click.way="close">显示区域</div>
</div>

<script>
function dropdown(){
  return {
    show:false,
    open(){
      this.show = true;
    },
    close(){
      this.show = false;
    },
    isOpen(){
      return this.show === true; 
    }
  }
}
</script>

例如:点击切换

div x-data="{tab:'tab1'}">  
  <button :active': tab === 'tab1'}" @click="tab = 'tab1'">tab1</button>
  <button :active': tab === 'tab2'}" @click="tab = 'tab2'">tab2</button>
  <div x-show="tab === 'tab1'">tab1 content</div>
  <div x-show="tab === 'tab2'">tab2 content</div>
</div>

例如:鼠标滑过加载文件,点击后显示区域。

<div x-data="{show:false}">
  <button @click="show = true" @mouseenter.once="fetch('/content.html').then(res=>res.text()).then(html=>$refs.content.innerHTML = html)">load</button>
  <div x-show="show" x-refs="content" @click.away = "show = false">
    loading spinner...
  </div>
</div>

x-init

x-init指令会在组件初始化时运行指定表达式,若希望在Alpine对DOM进行初始化更新后在运作程序,可从x-init中定义一个回调函数。类似于Vue中的mounted()钩子函数,在组件挂载到DOM后触发。

<div x-data="{text:'hello'}" x-init="alert('hello')">
  <div x-text="text"></div>
</div>

x-bind

<input x-bind:[attribute] = "[expression]" />

x-bind指令可使用简写的:语法,x-bind将一个属性值设定为JavaScript运算表达式的最终结果,这个表达式可以存储组件的数据对象data中的所有键,而且每次更新数据数据时都会同步更新。

用于class属性的x-bind指令

当x-bind指令绑定class属性使用时行为有所不同,对于class属性会传入一个对象,对象的键是class而值是布尔表达式,以用于确定元素是否应用此class。

例如:当show属性值为true时类名hidden才会被 应用

<div x-data="{show:false}">
  <div x-bind:hidden':show}"></div>
</div>

x-bind指令支持元素boolean属性

x-bind指令支持与数值属性相等的布尔属性,可使用变量作为条件或可解析为true或false的JavaScript表达式。

常见符合HTML规范的布尔属性包括disabled、readonly、required、checked、hidden、selected、open等。

例如:使用自定义disabled布尔变量来控制添加或删除按钮的disabled属性

<div x-data="{disabled:true}">
  <button x-bind:disabled="disabled">click 1</button>
  <button disabled="disabled">click 2</button>
  <button>click 3</button>
</div>

x-text

<span x-text= "[expression]"></span>
  • x-text指令用于直接输出纯文本,不会编译为 HTML代码。
  • x-text指令的工作原理与x-bind类似,只是x-text不会更新元素的值,而是更新元素的innerText。
<div x-data="{title:'page title'}">
  <h1 x-text="title"></h1>
</div>

x-html

<span x-html="[expression]"></span>
  • x-html指令用于直接输出文本,但会渲染HTML代码。
  • x-html指令的工作原理类似x-bind,只是不会更新元素的值,而是更新元素的innerHTML。
  • 若使用第三方内容动态生成HTML将会导致XSS漏洞的发生
<div x-data="{title:'<h1>page title</h1>'}">
  <div x-html="title"></div>
</div>

x-model

x-model指令用于双向数据绑定

<div x-data="{title:'hello world'}">
  <input type="text" x-model="title">
  <div x-text="title"></div>
</div>

修饰器x-model.debounce用于允许为事件处理程序添加延迟执行机制,即事件处理程序将不会立即被运行,它会自事件触发后等待一段事件后才会开始运行。当处理程序准备还被调用时,最后一个处理程序的调用将被执行。预设的debounce等待时间为250毫秒,若需要自定义等待事件可使用。

<input x-model.debounce.750 = "search" />
<input x-model.debounce.750ms = "search" />

x-show

<div x-show="[expression]"></div>

x-show指令用于条件渲染,指令值为布尔类型true或false,根据布尔值会在元素上切换显示css的display属性值是否为none。

<div x-data="{show:false}">
  <div x-show="show">show area</div>
</div>

x-if

<template x-if="[expression]"></template>

x-if指令用于条件渲染,但仅限用于<template>标签中拥有根元素的情况下,x-if标签可以从DOM中完全删除元素,因为Alpine不是使用的虚拟DOM。

<div x-data="{show:false}">
  <template x-if="show">
    hello
  </template>
</div>

x-for

x-for指令用于列表的渲染,可为数组中每个子项创建新的DOM节点,与Vue中的v-for指令类似,适用于<template>模板标记中,而非常规DOM元素中。

<div x-data="{list:[1,2,3]}">
  <ul>
  <template x-for="item in list" :key="item">
    <li x-text="item"></li>
  </template>
  </ul>
</div>
<div x-data="{list:[{name:'alice'}, {name:'ben'}]}">
  <ul>
  <template x-for="(item, index) in list" :key="index">
    <li>
      <span x-text="index"></span>
      <span x-text="item.name"></span>
    </li>
  </template>
  </ul>
</div>
  • x-for指令必须使用在<template>模板标记拥有根元素的情形下
  • x-for指令支持嵌套,但必须将每个循环都包含在元素中。
<div x-data="{list:[{name:'alice', ls:[1,2,3]}, {name:'ben', ls:[1,2,3]}]}">
  <ul>
  <template x-for="(item, index) in list" :key="index">
    <li>
      <span x-text="index"></span>
      <span x-text="item.name"></span>
      <template x-for="v in item.ls">
        <span x-text="v"></span>
      </template>
    </li>
  </template>
  </ul>
</div>

x-ref

x-ref指令提供从组件中检索原始DOM元素的便捷方式,通过在元素上设置x-ref属性可使其对名为$refs的对象内的所有事件处理程序都可用。这种方式可有效地替代设置id属性以及使用document.querySelector获取id属性。

<div x-ref="name"></div>
<button x-on:click="$refs.name.innerText = 'hello'">click</button>

x-cloak

<style>
[x-cloak]{display:none;}
</style>

<div x-data="{name:'junchow'}" x-cloak></div>

当Alpine初始化后,x-cloak属性会从元素上被移除。对于隐藏预先初始化的DOM元素很有用。

x-on

x-on指令可使用简化的@语法,比如@click=""。

<button x-on:[event] = "[expression]">click</button>

x-on指令将事件监听器添加到所声明的元素上,当触发对应事件时将执行它所设置的JavaScript表达式的值。如果在表达式中修改了任何数据,都将会更新到“绑定”到此数据的其它元素的属性中。


事件修饰符

事件修饰器只能添加在x-on指令上

事件修饰符描述
.away当事件绑定的对象之外的元素触发对应事件时调用的监听函数
.window将事件绑定在window全局对象上,而非事件所在的DOM节点。
事件修饰器描述
.away事件处理器只有在事件源为非自身或子项时才会被执行
.prevent在触发事件时调用preventDefault函数以取消元素默认行为
.stop在触发事件时调用stopPropagation函数以阻止事件冒泡
.self只有当$event.target是元素本身时,.self才会触发事件处理程序。
.window将事件监听器加入到全局的window对象中而非当前DOM节点上
.once保证事件监听器只会被处理依次
.debounce事件处理器延迟执行


转场修饰器

x-show.transition提供的修饰器可方便地使用CSS控制转场过渡效果,若想禁止使用可直接使用x-show.immediate修饰器。

转场修饰器描述
x-show.transition开启转场过渡效果
x-show.immediate禁止转场过渡效果

x-show.transition修饰器默认为同步淡出与缩放效果

opacity
scale:0.95
timing-function:cubic-bezier(0.4, 0.0, 0.2, 1)
duration-in: 150ms
duration-out: 75ms
转场修饰器指令描述
x-show.transition.in只在进入时转场
x-show.transition.out只在退出时转场
x-show.transition.opacity只使用淡出效果
x-show.transition.scale只使用缩放效果
x-show.transition.scale.75自定义CSS缩放比例transform: scale(.75)
x-show.transition.duration.200ms将进入转场设定为200ms,退出时会自动设置为进入时的一般即100ms。
x-show.transition.origin.top.right自定义CSS转场起始点为transform-origin: top right
x-show.transition.in.duration.200ms.out.duration.50ms为进入和退出设置不同的持续时长


转场指令 x-transition

Alpine提供了6种不同的转场指令,用于元素的隐藏和显示状态之间的不同阶段,转场指令可同时与x-show和x-if指令同时使用。

转场指令描述
x-transition:enter在整个进入阶段时执行
x-transition:enter-start在元素插入前添加,在元素插入后删除一帧。
x-transition:enter-end元素在插入后添加一帧,同时删除enter-start,即在转场或动画结束时删除。
x-transition:leave在整个退出阶段时执行
x-transition:leave-start触发离开转场时立即添加,一帧后删除。
x-transition:leave-end触发离开转场后添加一帧,同时删除leave-start,即在转场或动画结束时删除。

<div x-data="{open:true}"> <div x-show="open" x-transition:enter="transition ease-out duration-300" x-transition:enter-start="opacity-0 transform scale-90" x-transition:enter-end="opacity-100 transform scale-100" x-transition:leave="transition ease-in duration-300" x-transition:leave-start="opacity-100 transform scale-100" x-transition:leave-end="opacity-0 transform scale-90" > transition1 </div> </div>

魔术属性

魔术属性描述
$el检索根组件的DOM节点
$refs检索组件内被标记为x-ref的DOM元素
$event检索事件监听器中原生浏览器Event事件
$dispatch创建一个自定义事件并在内部使用.dispatchEvent()事件进行调度
$nextTick在Alpine进行响应式DOM更新后执行给定的表达式
$watch当监听的组件属性被修改时会调用指定回调函数

$el

$el是一个魔术属性,可用于检索根组件的DOM节点。

<div x-data>
  <button @click="$el.innerHTML='hello'">click</button>
</div>

$refs

$refs魔术属性用于检索组件内拥有x-ref指令标记的DOM元素,对于手动操作DOM元素非常有用。

<div x-data>
  <span x-ref="name"></span>
  <button @click="$refs.name.innerText='alice'">click</button>
</div>

$event

$event魔术属性可以在事件监听器种检索本机原生浏览器中的event事件对象

<div x-data>
  <input type="text" @input="alert($event.target.value)"/>
</div>

$dispatch

$dispatch是创建自定义事件CustomEvent并在其内部使用dispatchEvent()分发事件的快捷方法

<div x-data>
  <div @custom-event="alert($event.detail.key)">
    <button @click="$dispatch('custom-event', {key:'hello'})">click</button>
  </div>
</div>

$dispath(eventname, object)中的第二个参数object会透过事件的detail属性来获取$event.detail.attrname,即将自定义的事件数据附加到.detail属性是浏览器中CustomEvent的标准做法。

$nextTick

$nextTick魔术属性允许仅在Alpine完成反应式DOM更新后执行给定的表达式,这对于想要在DOM状态回应数据更新之后,再与之交互的情形中非常有用。

<div x-data="{name:'click'}">
    <button x-text="name" @click="name='test'; $nextTick(_=>alert($event.target.innerText))"></button>
</div>

$watch

$watch魔术属性用于监视组件的属性

<div x-data="{open:false}" x-init="$watch('open', value=>alert(value))">
    <button @click="open=!open">click</button>
</div>


仅供个人学习参考/导航指引使用,具体请以第三方网站说明为准,本站不提供任何专业建议。如果地址失效或描述有误,请联系站长反馈~感谢您的理解与支持!

链接: https://fly63.com/nav/3245

more>>
相关栏目
react
Facebook开发的一款高效、灵活、声明式设计的JS库
官网 GitHub
AngularJS
Google推出有条理,可维护,易编程的MVVM框架
官网 GitHub
backbone
提供:模型、集合、视图,开发重量级的javascript应用的框架
官网 GitHub
jquery
一个快速、简洁的JavaScript代码库
官网 GitHub
zepto.js
一个轻量级的针对现代高级浏览器的JavaScript库
官网 GitHub
Ember
JavaScript MVC框架,它用来创建复杂的Web应用程序,消除了样板
官网 GitHub
nw.js
轻量级桌面应用开发的捷径
官网 GitHub
socket.io
一个WebSocket库,包括了客户端的js和服务器端的nodejs
官网 GitHub
nuxt.js
基于 Vue.js 的轻量级、服务端渲染 (SSR) 应用框架
官网 GitHub
Next.js
实现react的服务端渲染的框架
官网 GitHub
Electron
基于Chromium 和 Node.js, 使用 JavaScript, HTML 和 CSS 构建跨平台的桌面应用
官网 GitHub
htmx
无需JavaScript的动态HTML
官网 GitHub
Nerv
一款由京东凹凸实验室打造的类React前端框架
官网 GitHub
lodash
一致性、模块化、高性能的 JavaScript 实用工具库
官网 GitHub
ocLazyLoad
AngularJS 的延迟加载(惰性加载)模块和组件
点击进入 GitHub
weui.js
WeUI 的轻量级 js 封装
点击进入 GitHub
首页 技术导航 在线工具 技术文章 教程资源 AI工具集 前端库/框架 实用工具箱

Copyright © 2018 Web前端开发网提供免费在线工具、编程学习资源(教程/框架/库),内容以学习参考为主,助您解决各类实际问题,快速提升专业能力。

手机预览