最近发现了一个好玩的框架,叫做AlpineJS,它是类似于Vue或者React这样的组件化开发框架,但是它更加轻量,下面是它的github地址
Scrimba上的视频教程
它更适合于在现有的项目里的某个部分应用组件(Vue和React也可以在某个部位适用,但是总感觉有点大),它有种拿来即用的感觉
先忽视安装步骤,直接看下面这个小例子
<div x-data="{ word: 'hello world' }">
<h1 x-text="word"></h1>
</div>
它的语法是从Vue里借鉴过来的,几乎和Vue一样,但是它是以指令为基础,没有什么{{}}
这样的语法,并且指令是以x-
开头的,不是Vue的v-
开头。
上面的那个例子中,你可以理解为,带有x-data
指令的标签容器,就相当于一个组件,在组件内部可以通过其他x-
指令去运用x-data
里的数据,做声明式的渲染操作。
看起来是不是很方便,官方说有点类似于javascript的tailwind CSS
(如果你用过tailwind CSS
你应该知道,这种工具式的开发特别爽)。
接下来看下一些常见的功能,它是怎么使用的。
如果想知道怎么安装的话直接去文档上看
如果你学过Vue,那么下面这些指令和Vue几乎一样,你也会知道其用法
x-text
<div x-data="{ word: 'hello world' }">
<h1 x-text="word"></h1>
</div>
x-html
<div x-data="{ word: '<h1>helloworld</h1>' }">
<div x-html="word"></div>
</div>
x-model
<div x-data="{text:''}">
<h1 x-text="text"></h1>
<input type="text" x-model="text">
</div>
x-if
x-show
<div x-data="{isShow:false}">
<div x-show="isShow">something hiddened</div>
</div>
x-for
<div x-data="{ls:[1,2,3]}">
<ul>
<template x-for="item in ls" :key="item">
<li x-text="item"></li>
</template>
</ul>
</div>
x-on:
or@
<div x-data="{isShow:true}">
<button @click="isShow = !isShow">show</button>
<div x-show="isShow">
jsut a panel
</div>
</div>
AlpineJS的事件监听修饰器和Vue的有些不同,除了这几个
.stop
.prevent
.once
还有下面这些键盘事件
@keydown.enter
@keydown.escape
@keydown.arrow-up
下面介绍些Alpine特有的
.away
<div x-data="{isShow:true}">
<div @click.away="isShow = false" x-show="isShow">
点我之外的元素来把我隐藏
</div>
</div>
.window
这个也很棒,对事件加上.window
修饰符后,该事件会绑定在window这个全局对象上,而不是事件所在的DOM节点,这样,我们很轻松地来添加一些全局事件如resize
,比如:
<div x-data="{isShow:true}">
<div
x-show="isShow"
@resize.window="isShow=window.outerWidth>768?false:true">
hello world
</div>
</div>
x-init
mounted
,在组件挂载到DOM后触发<div x-init="alert('hello')" x-data="{text:'hello'}">
<div x-text="text">
</div>
</div>
AlpineJS还有很多功能,我不想像文档那样一个个列出来,我只是列出一些让大家感受下。怎么样?AlpineJS是不是很有趣,它可以快速地在局部实现功能性组件,对于快速封装下拉菜单,模态框,滑动侧边栏等具有功能性的组件有种便捷性。但是我目前还不知道如果把其整合到项目里,后再研究了