跳转至

事件

Alpine 让监听浏览器事件并做出响应变得非常简单。

监听简单事件

通过使用 x-on,你可以监听元素上或其内部触发的浏览器事件。

以下是一个监听按钮点击的基本示例:

<button x-on:click="console.log('clicked')">...</button>

你也可以使用事件简写语法 @。以下是同样的示例,但使用了简写语法(接下来我们将使用这种语法):

<button @click="...">...</button>

除了 click,你还可以按名称监听任何浏览器事件。例如:@mouseenter@keyup 等都是有效的语法。

监听特定按键

假设你想监听 <input> 元素中按下 enter 键的事件。Alpine 通过添加 .enter 让这变得很简单:

<input @keyup.enter="...">

你甚至可以组合按键修饰符来监听按键组合,例如按下 enter 的同时按住 shift

<input @keyup.shift.enter="...">

阻止默认行为

在响应浏览器事件时,通常需要"阻止默认行为"(阻止浏览器事件的默认行为)。

例如,如果你想监听表单提交但阻止浏览器提交表单请求,可以使用 .prevent

<form @submit.prevent="...">...</form>

你也可以使用 .stop 来实现 event.stopPropagation() 的功能。

访问事件对象

有时你可能想在代码中访问原生浏览器事件对象。为了方便,Alpine 自动注入了一个 $event 魔法变量:

<button @click="$event.target.remove()">Remove Me</button>

派发自定义事件

除了监听浏览器事件,你也可以派发它们。这对于与其他 Alpine 组件通信或在 Alpine 之外的工具中触发事件非常有用。

Alpine 为此暴露了一个名为 $dispatch 的魔法方法:

<div @foo="console.log('foo was dispatched')">
    <button @click="$dispatch('foo')"></button>
</div>

如你所见,当按钮被点击时,Alpine 会派发一个名为"foo"的浏览器事件,而 <div> 上的 @foo 监听器会捕获它并做出响应。

在 window 上监听事件

由于浏览器事件的性质,有时在顶层 window 对象上监听事件非常有用。

这样你就可以像下面的示例一样在组件之间进行通信:

<div x-data>
    <button @click="$dispatch('foo')"></button>
</div>

<div x-data @foo.window="console.log('foo was dispatched')">...</div>

在上面的示例中,如果我们点击第一个组件中的按钮,Alpine 会派发"foo"事件。由于浏览器事件的工作方式,它们会通过父元素一直"冒泡"到顶层的"window"。

现在,因为我们在第二个组件中通过 .window 在 window 上监听了"foo",当按钮被点击时,这个监听器会捕获它并打印"foo was dispatched"消息。

→ 阅读更多关于 x-on 的内容