javascript - AlpineJS x 数据被覆盖
问题描述
我有以下 HTML 结构:
<div x-data="{selected: 0}">
<div x-data="{ open: false }"
@click="open = !open; selected !== 1 ? selected = 1 : selected = 0;"
>
test
</div>
<div x-data="{ open: false }"
@click="open = !open; selected !== 2 ? selected = 2 : selected = 0;"
>
test
</div>
</div>
问题是在我写入 div 子 x-data 后,第一个带有所选 x-data 的 x-data 不再存在。我认为说我覆盖它是正确的。所以问题是,我怎样才能防止这种情况发生?我希望能够保持打开状态并更新所选内容。谢谢你
解决方案
在 Alpine.js 中,您的数据被封装在组件内(意味着没有父组件会看到它),嵌套组件也不会看到父组件数据。
目前,此功能不在路线图上。在此处查看此 Github 讨论。
事件总线方法
一种方法是利用 Alpine.js$dispatch
魔术属性并在其他地方使用事件侦听器x-on:
或@
别名。
<!-- Parent component -->
<div id="papa" x-data="{isTired: false}" x-on:cry.window="isTired = true">
<span x-text="'Papa is tired: ' + isTired"></span>
<!-- New child component scope -->
<div id="baby" x-data="">
<button @click="$dispatch('cry')">Make Baby Cry</button>
</div>
</div>
这利用了本机浏览器事件冒泡和捕获。
状态管理存储方法
如果您熟悉 React 或 Vue.js 等框架,那么您可能熟悉 Redux 或 Vuex 等状态管理库。
Spruce是类似 Alpine.js 的精简版本,它的好处是允许您轻松地在组件之间共享数据。
您可以在他们的入门指南中看到组件之间的通信示例。
推荐阅读
- swiftui - 如何在 SwiftUI 应用中保存和加载 ARWorldMap?
- java - 如何使用默认方法返回功能接口的逆接口
- angular - 来自子域 A 的 Cookie 未发送到子域 B
- azure - 天蓝色忽略 saml 元数据描述符
- graphql - Apollo Mock Error state -> Error: No more mocked response for the query
- javascript - 反应上下文不会导致重新渲染
- java - 使用注入点测试自定义验证器,WeldUnit 没有注入休眠 bean 验证工厂
- amazon-web-services - EC2 实例中的 API 成功使用端口 5000,但是当从负载均衡器到达时,端口不工作
- python - Windows、PyCharm:DPI-1047:找不到 32 位 Oracle 客户端库
- sql - 使用 GROUP BY 后查找具有 MAX 值的行