You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel自定义table组件插槽无法访问foreach当前迭代$tr数据如何解决

解决方案

你需要使用Laravel Blade提供的作用域插槽功能,将组件循环内的当前迭代数据传递到插槽作用域中,实现步骤如下:

1. 修改table组件代码

将组件内的插槽调用改为闭包调用形式,把需要暴露的迭代变量作为参数传入插槽:

<table>
    @foreach($rowsArray as $tr)
        <tr>
            @foreach($tr as $td_key => $td_value)
                <td>
                    @if(isset($customSlot))
                        {{-- 传递当前迭代的$tr、字段键、字段值给插槽 --}}
                        {{ $customSlot(compact('tr', 'td_key', 'td_value')) }}
                    @else
                        {{ $td_value }}
                    @endif
                </td>
            @endforeach
        </tr>
    @endforeach
</table>

2. 调用组件时接收插槽参数

定义插槽时通过scope属性接收组件传递过来的参数,即可直接访问当前循环的$tr数据:

基础写法(兼容所有支持作用域插槽的Laravel版本)

<x-table :rows="$rowsArray">
  <x-slot name="customSlot" scope="slotData">
    <div class="flex">
      <span>
          {{ $slotData['tr']['name'] }}
      </span>
      <span>
          {{ $slotData['tr']['age'] }} age
      </span>
    </div>
  </x-slot>
</x-table>

简化解构写法(Laravel 8+ 支持)

可以直接在scope里解构参数,直接使用$tr变量,和你原本的写法一致:

<x-table :rows="$rowsArray">
  <x-slot name="customSlot" scope="['tr' => $tr]">
    <div class="flex">
      <span>
          {{ $tr['name'] }}
      </span>
      <span>
          {{ $tr['age'] }} age
      </span>
    </div>
  </x-slot>
</x-table>

额外优化说明

如果你实际需求是每行仅输出一个包含完整自定义布局的td(而非每个字段对应一个重复布局的td),可以去掉组件内部@foreach($tr as $td_key => $td_value)的循环,直接在tr内写单个td调用插槽即可,避免重复渲染相同内容。

内容的提问来源于stack exchange,提问作者Marko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:39:05