3. Truyền dữ liệu cho component (Passing data to component) (ok)
Đôi khi với một $slot
thì bị hạn chế cho việc tùy chỉnh nội dung một component, chính vì thế Laravel cho phép truyền slot khác ngoài $slot
mặc định để ứng dụng của bạn linh hoạt hơn.
@component('components.modal')
@slot('title')
Lỗi!
@endslot
Đã có lỗi xảy ra
@endcomponent
Sử dụng @slot
với tham số là tên biến nhận dữ liệu trong blade view component để khai báo một giá trị khác mà component có thể nhận.
Tại component modal
, bạn chỉnh sửa nội dung như sau:
<div class="modal">
<h3>{{ $title }}</h3>
{{ $slot }}
</div>
Laravel sẽ hiểu phần nội dung bạn khai báo ở @slot
sẽ truyền vào $title
, còn phần chỉ nằm trong cặp thẻ @component
thì sẽ truyền vào $slot
mặc định. Mình xin tản mạn một chút, cú pháp {{ $varible }}
là dùng để hiển thị dữ liệu của biến.
Và đây là kết quả sau khi tải lại trang:
Ngoài ra bạn có thể thay thế cách truyền dữ liệu cho component trên bằng cách:
@component('components.alert', ['title' => 'Lỗi!'])
Đã có lỗi xảy ra
@endcomponent
Tham số thứ hai trong ()
sẽ nhận một mảng chứa dữ liệu và lấy tên key làm tên biến trong component. Với cách này thông thường dùng để truyền các dữ liệu ngắn, không chứa thẻ HTML.
Từ khóa:@slot('title') dùng truyền dữ liệu một cách linh hoạt sang component
Ví dụ:
resources\views\child.blade.php
@extends('app')
@section('content')
<h1>My content</h1>
@component('components.modal')
@slot('title')
Lỗi!
@endslot
@endcomponent
@endsection
resources\views\components\modal.blade.php
<div class="modal">
{{ $title }}
</div>
Ngoài ra bạn có thể thay thế cách truyền dữ liệu cho component trên bằng cách:
@component('components.alert', ['title' => 'Lỗi!'])
Đã có lỗi xảy ra
@endcomponent
Last updated
Was this helpful?