我试图在我的布局中使用它,我突然想到使用Laravel 5.4 @slot的新功能。
只是想知道是否可以将阵列传递到插槽?
@section('SampleSection')
@component( 'mylayouts.partials.contentheader' )
@slot('title')
Sample Title
@endslot
@slot('indexes')
Pass array here // example [ 'a', 'b', 'c' ]
@endslot
@endcomponent
@endsection
据我所知,不可能通过@slot
将数组传递给组件。但是,可以直接将数组传递给组件,而无需使用插槽。
将其他数据传递给组件
有时您可能需要将其他数据传递给组件。因此,您可以将数据数组作为第二个参数传递给@component指令。所有数据都将作为变量提供给组件模板:
@component('alert', ['foo' => 'bar']) ... @endcomponent
所以假设你有一组数据:
$my_array = ['a', 'b', 'c']
您可以将它传递给组件,如下所示:
@component('mylayouts.partials.contentheader', ['my_array' => $my_array])
...
@endcomponent
或者你可以直接传递它,而不使用变量:
@component('mylayouts.partials.contentheader', ['my_array' => ['a', 'b', 'c']])
...
@endcomponent
然后,在组件文件中,您将可以访问$my_array
变量。例如,在contentheader.blade.php
文件中,您可以这样做:
<ul>
@foreach($my_array as $value)
<li>{{ $value }}</li>
@endforeach
</ul>
我需要同样的东西。
这可以作为暂时的解决方案,但不是最好的形式。
@component('component.tab.header')
@slot('navs', [
"a" => "Pepe",
"b" => "Maria"
])
@endcomponent
编辑:
最后,就我而言,我解决了这个问题:
@component('component-name')
@slot('slot-name')
Value1|Value2|Value2
@endslot
@endcomponent
并在组件代码中:
@foreach(explode('|', $slot-name) as $value)
The value is {{ $value }} <br/>
@endforeach
我可能错了,但你不能只将数据传递给组件并处理组件中的数据吗?文件显示
有时您可能需要将其他数据传递给组件。因此,您可以将数据数组作为第二个参数传递给@component指令。所有数据都将作为变量提供给组件模板:
@component('alert',['foo'=>'bar'])... @endcomponent
处理组件中的数据而不是使用插槽?
它是如此简单和容易地将数组发送到组件模板中,而在视图页面中没有任何@slot
view.blade.php
@component('components.button',[
'tooltipTitle'=>'buttorr33',
'addStyle'=>'pointer',
])
@endcomponent
在组件php文件component \ button.php中
<div class="block-buttons {{$addStyle or NULL}}"
{{--if set tooltip, add atributes--}}
@if (isset($tooltipTitle))...
我是怎么做到的
在任何视图中包含@PageNav组件标记
@PageNav([
'menus' => [
[
'title' => 'foo',
'url' => '/foo/index'
],
[
'title' => 'bar',
'url' => '/bar/page'
]
]
]) @endPageNav
创建视图/组件/ PageNav.php文件
@foreach ($menus as $menu)
<li class="nav-item">
<a class="nav-link" href="{{ $menu['url'] }}">{{ $menu['title'] }}</a>
</li>
@endforeach
注册组件:(AppServiceProvider.php - > Boot)
Blade::component('components.PageNav'); // "/views/components/PageNav.php"
希望它有所帮助!
这是一个示例组件。将项目数分配给$numberOfSlots
变量,它将逐个搜索插槽块(body_1
,body_2
,body_3
)
因为我构建了一个表单向导,并且在" "
之间定义html块太难看了所以我更喜欢@slot
。
零件:
<div class="component">
@for($i = 1; $i <= $numberOfSlots; $i++)
<div class="item">
{{ ${"body_{$i}"} }}
</div>
@endfor
</div>
刀:
@component(['numberOfSlots' => 3])
@slot('body_1')
Dynamically created slot 1
@endslot
@slot('body_2')
Dynamically created slot 2
@endslot
@slot('body_3')
Dynamically created slot 3
@endslot
@endcomponent