Laravel 8下用Alpine JS v3 x-show切换Blade表格行报错如何解决
结论
该实现方式完全可行,无需使用x-for渲染列表,可保留Blade变量直接调用的能力,仅需调整DOM结构适配HTML规范即可解决报错问题。
报错原因
代码报错是因为HTML规范不允许<table>的直接子节点为<div>元素,浏览器渲染时会自动将写在<tr>外的<div>移到<table>标签外部,导致x-data定义的show变量和后续的x-on、x-show指令不在同一个Alpine作用域内,因此抛出变量未定义的错误。
修复方案
利用HTML中<table>支持多个<tbody>子元素的特性,将原有的<div>替换为<tbody>,把x-data定义在<tbody>标签上即可,修改后的代码如下:
<table> @foreach($items as $item) <tbody x-data="{show: false}"> <tr> <td> <button type="button" x-on:click="show = !show"> Toggle Show </button> </td> </tr> <tr x-show="show"> <td>{{ $item->name }}</td> </tr> </tbody> @endforeach </table>
效果说明
修改后每组关联的<tr>都在同一个<tbody>的Alpine作用域内,浏览器不会调整DOM结构,点击按钮即可正常切换对应行的显示隐藏状态,原有Blade变量的调用逻辑完全不需要修改。
内容的提问来源于stack exchange,提问作者howellmartinez
相关产品推荐
相关产品推荐

