javascript - 如何复用AlpineJs数据?

标签 javascript html alpine.js

<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3/dist/cdn.min.js"></script>

<div x-data="info">
  <span x-text="data"></span>
</div>

<div x-data="info">
  <span x-text="data"></span>
</div>

<script>
  let info ={
  data: "hello"
}

document.addEventListener("alpine:init", () => {
    info = Alpine.reactive(info)
    Alpine.data("info", () => info);
 });
</script>

以上代码给出以下错误:

enter image description here

如何解决该问题并重用 AlpineJS 数据?

最佳答案

它不起作用,因为每个 x-data 都会重新启动其表达,意味着将魔法、Alpine.data 注入(inject) x-data 结果中。在您的情况下,两个 x 数据引用同一对象“info”。该信息将启动两次,第二次注入(inject)“$nextTick”魔法时失败。解决方案是让 x-data 引用它自己的根对象,将公共(public)“info”分配给它们的属性。这是修改后的版本:

<head>
  <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3/dist/cdn.js"></script>
</head>

<body>
  <div x-data="first">
    <span x-text="info.data"></span>
  </div>

  <div x-data="second">
    <span x-text="info.data"></span>
  </div>

  <script>
    let first = {}
    let second = {}
    let info = {
      data: "hello"
    }

    document.addEventListener("alpine:init", () => {
      info = Alpine.reactive(info)
      first.info = second.info = info
      setTimeout(() => {
        info.data = "world"
      }, 1000)
    });
  </script>
</body>

关于javascript - 如何复用AlpineJs数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69290431/

相关文章:

java - 从 JS 访问 ServletContext

javascript - 嵌入时如何从 Rhino 返回退出代码?

javascript - 如何处理 Flux 和 React.js 中的非 View 更改操作

php - HTML5 的 Canvas 可以处理在其中绘制的多个图像吗?

laravel - AlpineJS 内联函数和 Laravel @json

javascript - 消除嵌入表格时的鼠标悬停事件问题

javascript - HTML 网站中的 IMEI

javascript - Alpine 嵌套 x 数据

javascript - alpine.js - 循环/单击多次触发的按钮

html - html5中的YouTube视频未显示我选择的视频