开发者问题收集

使用脚本标签时,Alpine.data() 中的键未定义

2022-07-05
2950

我有一个 Django 模板,其中包含 Alpine.js (v3.10.2) 的脚本标记:

<div x-data="product" class="product">
  ...
</div>

<script>
  document.addEventListener('alpine:init', () => {
    Alpine.data('product', () => ({
      count: 1,
      increment() {
        this.count = this.count++
      },
      decrement() {
        this.count = this.count--
      }
    }))
  })
</script>

这符合 Alpine.data() 文档 。但是,这会导致错误:

Alpine Expression Error: product is not defined
Expression: "product"

当我直接在 x-data 属性中设置数据时,不会出现此问题:

<div x-data="{ count: 1 }" class="product">
  ...
</div>

我使用 defer 选项包含 alpinejs 脚本。

2个回答

您需要返回 Alpine.js 组件(例如使用箭头语法):

<script>
  document.addEventListener('alpine:init', () => {
    Alpine.data('product', () => ({
      count: 1,
      increment() {
        this.count++
      },
      decrement() {
        this.count--
      }
    }))
  })
</script>
Dauros
2022-07-05

由于 html 代码中的拼写错误,我遇到了类似的问题:

<template>
...
<template>

您可能会看到在结束 template 标签中缺少斜线,因此正确的代码应该是:

<template>
...
</template>

在这种特定情况下,错误太具有误导性,因为您可能认为涉及脚本初始化中的某种竞争条件,但它更直接。

Dmitry
2024-03-16