РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
135 of 274 menu

Именованный слот

Именованный слот позволяет передавать в компонент несколько независимых блоков контента, каждый из которых имеет своё имя. Это удобно для создания сложных макетов, где требуется разместить контент в разных частях компонента, например, заголовок, основное содержимое и подвал. В Blade-шаблоне компонента для вывода именованного слота используется директива @slot с указанием имени.

Создание компонента с именованными слотами

Создадим компонент Card, который будет использовать два именованных слота: header и footer. В Blade-шаблоне компонента определим эти слоты с помощью директивы @slot:

<?php namespace AppLivewire; use LivewireComponent; class Card extends Component { public function render() { return view('livewire.card'); } } ?>
<div class="card"> <div class="card-header"> {{-- Вывод содержимого слота 'header' --}} @slot('header') Default Header @endslot </div> <div class="card-body"> {{-- Вывод основного содержимого --}} {{ $slot }} </div> <div class="card-footer"> {{-- Вывод содержимого слота 'footer' --}} @slot('footer') Default Footer @endslot </div> </div>

Теперь при использовании компонента мы можем передать содержимое для каждого слота:

<livewire:card> <x-slot name="header"> <h2>Заголовок карточки</h2> </x-slot> <p>Основное содержимое карточки.</p> <x-slot name="footer"> <small>Подвал карточки</small> </x-slot> </livewire:card>

Результат выполнения кода:

<div class="card"> <div class="card-header"> <h2>Заголовок карточки</h2> </div> <div class="card-body"> <p>Основное содержимое карточки.</p> </div> <div class="card-footer"> <small>Подвал карточки</small> </div> </div>

Передача данных в именованные слоты

В именованные слоты можно передавать данные, используя атрибут :name директивы @slot:

<?php namespace AppLivewire; use LivewireComponent; class Alert extends Component { public $type = 'info'; public function render() { return view('livewire.alert'); } } ?>
<div class="alert alert-{{ $type }}"> @slot('title', 'Заголовок по умолчанию') <strong>{{ $title }}</strong> @endslot {{ $slot }} </div>

Использование компонента с переопределением данных:

<livewire:alert :type="$type"> <x-slot name="title"> Внимание! </x-slot> Это сообщение для пользователя. </livewire:alert>

Результат выполнения кода:

<div class="alert alert-info"> <strong>Внимание!</strong> Это сообщение для пользователя. </div>

Совмещение именованных и стандартного слота

В компоненте можно одновременно использовать именованные слоты и стандартный слот, который получает всё содержимое, не обёрнутое в x-slot:

<div class="panel"> @slot('header') Заголовок панели @endslot <div class="panel-content"> {{ $slot }} </div> @slot('footer') Подвал панели @endslot </div>

Пример использования:

<livewire:panel> <x-slot name="header"> <h1>Основной заголовок</h1> </x-slot> <p>Основной контент панели.</p> <x-slot name="footer"> <p>Дополнительная информация</p> </x-slot> </livewire:panel>

Результат выполнения кода:

<div class="panel"> <h1>Основной заголовок</h1> <div class="panel-content"> <p>Основной контент панели.</p> </div> <p>Дополнительная информация</p> </div>

Смотрите также

  • атрибут компонента slot,
    который определяет стандартный слот
  • атрибут компонента attributes,
    который позволяет получить все атрибуты элемента
  • атрибут компонента id,
    который генерирует уникальный идентификатор
  • метод компонента render,
    который возвращает представление компонента
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить