将变量从组件传递到插槽

Hub*_*NNN 6 components laravel laravel-blade

是否可以将变量从组件传递到插槽中。这是一个例子:

{{-- index.blade.php --}}
@component('slider', ['entities' => [0, 1, 2]])
    @slot('title')
        Slider title
    @endslot
    @slot('slide')
        Slider content no {{ $entity }}
    @endslot
@endcomponent


{{-- slider.blade.php --}}
<h1>{{ $title }}</h1>
<ul>
@foreach($entities as $entity)
    <li>{{ $slide }}</li>
@endforeach
</ul>
Run Code Online (Sandbox Code Playgroud)

当前结果:

异常:未定义$ entity

预期结果:

<h1>Slider title</h1>
<ul>
    <li>Slider content no 0</li>
    <li>Slider content no 1</li>
    <li>Slider content no 2</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
  • 如何将$ entity变量传递到幻灯片插槽中?
  • 甚至有可能这样做吗?
  • 如果没有,还有其他选择吗?

Kal*_*asa 6

似乎没有办法将数据从组件传递到插槽上下文。这也是与本案@section/ @yield

我发现的是@each函数。https://laravel.com/docs/5.6/blade#rendering-views-for-collections

您需要为列表项内容创建另一个视图部分(item在此处调用)。

{{-- index.blade.php --}}
@component('slider', ['entities' => [0, 1, 2], 'item_view' => 'item'])
    @slot('title')
        Slider title
    @endslot
@endcomponent


{{-- item.blade.php --}}
<li>
  Slider content no $entity
</li>


{{-- slider.blade.php --}}
<h1>{{ $title }}</h1>
<ul>
  @each($item_view, $entities, 'entity')
</ul>
Run Code Online (Sandbox Code Playgroud)

示例:制作具有不同内容的新滑块:

{{-- gallery.blade.php --}}
@component('slider', ['entities' => ['a.png', 'b.png', 'c.png'], 'item_view' => 'gallery_item'])
    @slot('title')
        Gallery
    @endslot
@endcomponent


{{-- gallery_item.blade.php --}}
<li>
  <img src={{ $entity }} />
</li>
Run Code Online (Sandbox Code Playgroud)