Die übergabe-Variablen aus der Komponente in einen slot

Ist es möglich, übergeben eine variable Komponente in einen Steckplatz.
Hier ist ein Beispiel:

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

Aktuelle Ergebnis :

Ausnahme : $entity nicht definiert ist

Erwartete Ergebnis:

<h1>Slider title</h1>
<ul>
    <li>Slider content no 0</li>
    <li>Slider content no 1</li>
    <li>Slider content no 2</li>
</ul>
  • Wie kann ich pass den $entity-Variablen in den slot schieben?
  • Ist es auch möglich, dies zu tun?
  • Wenn nicht, gibt es alternativen?
  • Was ist das Ergebnis, das Sie tatsächlich haben?
  • Gibt eine Ausnahme, die sagen, dass $entity nicht definiert ist.
InformationsquelleAutor HubertNNN | 2018-05-25



3 Replies
  1. 2

    Scheint es, dass es keine Möglichkeit gibt, das zum übergeben von Daten von einer Komponente zu einer slot-Rahmen. Es ist auch der Fall mit @section/@yield.

    Was ich entdeckt habe, ist die @each Funktion. https://laravel.com/docs/5.6/blade#rendering-views-for-collections

    Würden Sie brauchen, um einen anderen Blick teilweise für das list-Element-Inhalt (genannt item hier).

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

    Beispiel: einen neuen Schieberegler mit verschiedenen Inhalten:

    {{ -- 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>
    • Ich mag deine Lösung, die ähnlich mein workaround, wirkt aber kompakter als @foreach($entities as $entity) @include('components.slider.slide.' . $type, ['entity' => $entity]) @endforeach
  2. 0

    Wir können versuchen, mit verschiedenen Weise. Hier, wie ich ausgeführt.

    HTML:

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

    • Gut, aber das schlägt dem Zweck mit einem Schlitz, in den ersten Platz. Mein Ziel war es, verwenden Sie die Schieberegler-Ansicht zu handhaben den Prozess des Gleitens und setzen Sie dann bestimmte Inhalte/div innen. Auf diese Weise konnte ich die Wiederverwendung der regler-Logik zu bauen Schieberegler mit verschiedenen Dingen, die eine enthält eine Liste von Benutzern, andere mit top-Kommentare und andere mit Bildern.
  3. 0

    UPDATE: ich ein Paket hinzufügen scoped feature slots Klinge. Dein problem ist ein perfekter Anwendungsfall für die bereichsbezogene slots und es kann einfach gelöst werden, Sie zu verwenden. Check it out.


    Kämpfte ich mit dem gleichen problem und schließlich habe ich einen Weg gefunden, um die „pass“ – Variablen aus der Komponente Steckplatz. Der trick ist die Verwendung @verbatim Richtlinie, die macht der Klinge code nicht kompilieren. Daher sind wir in der Lage, um pass blade-code zum slot und kompilieren Sie es in unsere Komponente. Allerdings gibt es nur eine Bedingung-der name der variable im foreach Schleife werden die gleichen sein wie in den Steckplatz. (Wie im Beispiel unten gezeigt — die slide slot verwendet $entity variable und damit auch die foreach Schleife in der Komponente)

    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>

    Ist es ein wenig „hacky“ Lösung für das problem, aber am wichtigsten ist es macht den job, wie Sie können siehe auf dem screenshot unten.

    Die übergabe-Variablen aus der Komponente in einen slot

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.