Skip to content

x-init

x-init 指令允许挂载到 Alpine 中任何元素的初始化阶段。

在 DOM 更新前,将在控制台中输出 "Init" 。

html
<div x-init="console.log('Init')"></div>

考虑另一个示例,其中 x-init 用于获取一些 JSON 并将其存储在 x-data 处理组件之前。

html
<div x-data="{todo: {}}" x-init="todo = await (await fetch('https://jsonplaceholder.typicode.com/todos/10')).json();">
    <span x-text="`Todo ID: ${todo.id}`"></span>
</div>

自动执行 init() 方法

如果一个组件的 x-data 对象包含一个 init() 方法,它会被自动调用。例如:

html
<div x-data="{
    init() {
        console.log('I am initialized')
    }
}">
</div>

这也同样适用于 Alpine.data() 语法注册组件的情况。

javascript
Alpine.data('dropdown', () => ({
    init() {
        console.log('I am initialized.')
    },
}))

独立的 x-init

可以添加 x-initx-data 指令的 HTML 块内部或外部的任何元素。例如:

html
<span x-init="console.log('Init')"></span>

也可以将 x-init 指令单独于 x-data 之外的内部任意元素。

html
<div x-data>
    <span x-init="console.log('Init too')"></span>
</div>

$nextTick

有时想等到 Alpine 完成渲染之后再执行一些代码,通过使用 Alpine 的 $nextTick 可以做到这一点。

html
<div x-init="$nextTick(() => { ... })"></div>