是否可以将组件中的变量传递到插槽中。 这是一个例子:
{{-- 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>
目前的结果:
例外:$ 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>
答案 0 :(得分:2)
似乎没有办法将数据从组件传递到插槽上下文。 @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>
示例:制作具有不同内容的新滑块:
{{-- 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>
答案 1 :(得分:0)
我们可以尝试不同的方式。在这里,我是如何执行的。
{{-- index.blade.php --}}
@component('slider', ['entities' => [0, 1, 2]])
@slot('title')
Slider title
@endslot
@slot('slide')
Slider content no
@endslot
@endcomponent
{{-- slider.blade.php --}}
<h1>{{ $title }}</h1>
<ul>
@foreach($entities as $entity)
<li>{{ $slide }} {{ $entity }}</li>
@endforeach
</ul>
&#13;
答案 2 :(得分:0)
更新:我创建了一个程序包,在Blade中添加了作用域插槽功能。您的问题是范围内插槽的完美用例,使用它们可以轻松解决。 Check it out。
我遇到了同样的问题,最后我找到了一种将变量从组件“传递”到插槽的方法。诀窍是使用@verbatim
指令,这使得刀片代码无法编译。因此,我们能够将刀片代码传递到插槽,然后在我们的组件中对其进行编译。但是,只有一种情况-foreach
循环中使用的变量名称必须与插槽中使用的名称相同。 (如下面的示例所示,slide
插槽使用$entity
变量,组件中的foreach
循环也是如此)
index.blade.php
@component('slider', ['entities' => [0, 1, 2]])
@slot('title')
Slider title
@endslot
@slot('slide')
@verbatim
Slide {{ $entity }}
@if ($entity === 0) {{-- Directives also work! --}}
<strong>Special slide</strong>
@endif
@endverbatim
@endslot
@endcomponent
slider.blade.php
<h1>{{ $title }}</h1>
<ul>
@foreach($entities as $entity)
<li>{!! eval('?>'.Blade::compileString($slide)) !!}</li>
@endforeach
</ul>
这是一个解决问题的“ hacky”解决方案,但最重要的是,它可以完成工作,如下面的屏幕截图所示。