Alpine.js 精简重

2023-10-17 12:28
文章标签 js 精简 alpine

本文主要是介绍Alpine.js 精简重,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

建议有 js 基础,先阅读官网文档,如果您会 vue 类似框架,上手会更快

https://alpinejs.dev

js 代码中可以使用 Alpine.sore 定义全局数据

Alpine.store('tabs', {current: 'first',items: ['first', 'second', 'third'],
})

x-text 可以运算任何 js 表达式

<span x-text="1 + 2"></span>

@submit.prevent 阻止浏览器提交表单

<form @submit.prevent="...">...</form><form @submit.prevent="console.log('submitted')" action="/foo"><button>Submit</button>
</form>

 .stop 也是阻止事件,以下点击按钮不会触发

<div @click="console.log('I will not get logged')"><button @click.stop>Click Me</button>
</div>

$watch 用于监听更改变化的值,需要使用回调添加第二个参数访问变化之前的值

<div x-data="{ open: false }" x-init="$watch('open', value => console.log(value))"><div x-data="{ open: false }" x-init="$watch('open', (value, oldValue) => console.log(value, oldValue))"><button @click="open = ! open">Toggle Open</button>
</div>

x-effect  用于监听值并且可以使用表达式

<div x-data="{ open: false }" x-effect="console.log(open)">

x-bind 的简写,例如 :class 条件简写

<div :class="show ? '' : 'hidden'">
<!-- Is equivalent to: -->
<div :class="show || 'hidden'"><div :class="closed ? 'hidden' : ''">
<!-- Is equivalent to: -->
<div :class="closed && 'hidden'">

$event 事件对象,和原生 js 里的 event 一样

<button @click="alert($event.target.getAttribute('message'))" message="Hello World">Say Hi</button#代码调用写法<button @click="handleClick">...</button><script>function handleClick(e) {// Now you can access the event object (e) directly}
</script>

.outside 很方便,点击元素之外触发

<div x-data="{ open: false }"><button @click="open = ! open">Toggle</button><div x-show="open" @click.outside="open = false">Contents...</div>
</div>

.window 添加到事件后,监听的是根对象,以下示例将侦听页面任何位置按下的转义键

<div @keyup.escape.window="...">...</div>

.once 添加到事件后只调用一次

<button @click.once="console.log('I will only log once')">...</button>

.debounce 延迟,防抖动,比如输入框填写文字后一定时间后触发

<input @input.debounce.500ms="fetchResults">

 .throttle 和 debounce  一样,但是只触发一次,可以自定义时间

<div @scroll.window.throttle="handleScroll">...</div>

.self 确保点击的的是自己,而不是子元素

<button @click.self="handleClick">Click Me<img src="...">
</button>

x-model 适用于以下 input

<input type="text">
<textarea>
<input type="checkbox">
<input type="radio">
<select>

 x-model.lazy 焦点离开触发,比如验证注册用户名和邮箱是否重复以及符合条件

<input type="text" x-model.lazy="username">
<span x-show="username.length > 20">The username is too long.</span>

x-model 会将任何数据转为字符串类型,可以添加 x-model.number 转换为数字类型

<input type="text" x-model.number="age">
<span x-text="typeof age"></span>

.debounce 同样防抖动,比如搜索框延迟请求数据,可自定义时间

.throttle 同样可用

<input type="text" x-model.debounce="search">

通过在元素商添加 x-ref 值,可以在别处轻松的设置和获取 x-model 值

el._x_model.get() (返回绑定属性的值)el._x_model.set() (设置绑定属性的值)<div x-data="{ username: 'calebporzio' }"><div x-ref="div" x-model="username"></div><button @click="$refs.div._x_model.set('phantomatrix')">Change username to: 'phantomatrix'</button><span x-text="$refs.div._x_model.get()"></span>
</div>

x-for 只能包含一个根目录,参考以下代码

无效<template x-for="color in colors"><span>The next color is </span><span x-text="color">
</template>有效<template x-for="color in colors"><p><span>The next color is </span><span x-text="color"></p>
</template>

x-ignore 忽略 alpinejs 的特性,以下代码中的中间 div 的 x-text 将不会生效

<div x-data="{ label: 'From Alpine' }"><div x-ignore><span x-text="label"></span></div>
</div>

添加 x-ref 并在其他元素使用 $refs 来调用它,$refs 指向的是 x-ref = 的元素

<button @click="$refs.text.remove()">Remove Text</button><span x-ref="text">Hello 👋</span>

x-cloak 直到 alpinejs 设置了值才显示,防止页面加载后但在 alpinejs 加载前闪现,建议使用 x-if 代替此写法

必须先添加 css

[x-cloak] { display: none !important; }
<span x-cloak x-text="message"></span>

x-teleport 追加元素到指定元素的后面,相当于 document.querySelector('boody').append

可循环嵌套,注意循环嵌套追加到同一元素之后的是同一层级

        <template x-teleport="body"><div x-show="open">Modal contents...</div></template>

$el 指向当前 dom 节点

<button @click="$el.innerHTML = 'Hello World!'">Replace me with "Hello World!"</button>

$dispatch 在元素之间传递事件,还可以在不同的 x-data 组件内通信传递

<div @notify="alert('Hello World!')"><button @click="$dispatch('notify')">Notify</button>
</div>#带数据传递<div @notify="alert($event.detail.message)"><button @click="$dispatch('notify', { message: 'Hello World!' })">Notify</button>
</div>#同级别层次用<div x-data><span @notify.window="..."></span><button @click="$dispatch('notify')">Notify</button>
</div>

 $nextTick 事件更新后执行表达式,它返回的是一个 promise 对象


点击后 button 按钮文字由 hello 变成 Hello World!,点击之后控制台输出的是 Hello World!
<div x-data="{ title: 'Hello' }"><button@click="title = 'Hello World!';$nextTick(() => { console.log($el.innerText) });"x-text="title"></button>
</div>另一种写法
<div x-data="{ title: 'Hello' }"><button@click="title = 'Hello World!';await $nextTick();console.log($el.innerText);"x-text="title"></button>
</div>

$data 魔法属性,可以在data以及嵌套区域获取 x-data 属性值

<div x-data="{ greeting: 'Hello' }"><div x-data="{ name: 'Caleb' }"><button @click="sayHello($data)">Say Hello</button></div>
</div><script>function sayHello({ greeting, name }) {alert(greeting + ' ' + name + '!')}
</script>

x-text 等可以使用异步函数

async function getLabel() {let response = await fetch('/api/label')return await response.text()
}<span x-text="await getLabel()"></span>或者直接写为<span x-text="getLabel"></span>

这篇关于Alpine.js 精简重的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/225402

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

js react 笔记 2

起因, 目的: 记录一些 js, react, css 1. 生成一个随机的 uuid // 需要先安装 crypto 模块const { randomUUID } = require('crypto');const uuid = randomUUID();console.log(uuid); // 输出类似 '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

uuid.js 使用

相关代码 import { NIL } from "uuid";/** 验证UUID* 为空 则返回 false* @param uuid* @returns {boolean}*/export function MyUUIDValidate(uuid: any): boolean {if (typeof uuid === "string" && uuid !== NIL) { //uuid

js定位navigator.geolocation

一、简介   html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置。   window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置int watchCurrentPosition(