首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将变量从组件传递到插槽

将变量从组件传递到插槽
EN

Stack Overflow用户
提问于 2018-05-25 17:37:52
回答 3查看 19.4K关注 0票数 13

是否有可能将变量从组件传递到插槽中。下面是一个示例:

{{-- 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>

  • 如何将$entity变量传递到幻灯片槽中?
  • 是否可以这样做?
  • 如果没有,是否有alternatives?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-10 02:12:12

似乎无法将数据从组件传递到插槽上下文。@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>
票数 6
EN

Stack Overflow用户

发布于 2019-07-05 07:26:05

更新:I创建了一个包,将范围插槽功能添加到刀片式服务器。对于作用域插槽,您的问题是一个完美的用例,使用它们可以很容易地解决这个问题。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>

这是一个有点“老生常谈”的问题的解决方案,但最重要的是,正如你在下面的屏幕截图中看到的那样,它完成了这项工作。

票数 2
EN

Stack Overflow用户

发布于 2018-05-26 00:01:57

我们可以尝试不同的方式。这里,我是如何执行的。

{{-- 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>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50526057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档