car*_*rse 5 laravel laravel-blade laravel-components
在旧式的 Laravel Blade 模板中,我们使用@section('section-name')以下方式:
{{-- h1para.blade.php --}}
<h1>
@section('heading')
Heading from Template
@endsection
</h1>
<p>
@yield('details')
</p>
Run Code Online (Sandbox Code Playgroud)
然后扩展该模板:
{{-- content.blade.php --}}
@extends('h1para')
@section('details')
Content from content page
@endsection
Run Code Online (Sandbox Code Playgroud)
在上面,我渲染的 HTML 输出如下所示,因为'heading'扩展文件中的“缺失”部分意味着我们默认返回模板中的内容:
<h1>Heading from Template</h1>
<p>Content from content page</p>
Run Code Online (Sandbox Code Playgroud)
但在新的组件做事方式中,我这样做:
<h1>Heading from Template</h1>
<p>Content from content page</p>
Run Code Online (Sandbox Code Playgroud)
如果您还没有收集到,问题是:如何为槽的内容设置默认值,这样如果扩展组件/模板中没有提供它,它就会回退到该默认值?
(我已经完成了搜索,但无法找到之前提出的相同问题)
我应该补充一点,我已经看到了解决方案(在 Laravel 文档中):
{{-- .../components/h1para.blade.php --}}
<h1>{{ $heading }}</h1>
<p>{{ $slot }}</p>
Run Code Online (Sandbox Code Playgroud)
但这似乎仅适用于默认值是易于管理的短字符串的情况。如果默认是很长的 HTML 流,那么它就无法满足我的需求。
重申一下:问题的关键在于默认内容可能是一长串 HTML。通过传入字符串(无论是否格式化为 HTML)来解决问题无法满足我的实际需求。
小智 -1
如果您传递如下数据:
<x-h1para header="<span>Header content</span>">
<div>Default slot content here</div>
</x-h1para>
Run Code Online (Sandbox Code Playgroud)
您可以在组件中显示如下:
<div>
<h1>{!! $heading ?? 'Default Heading Here' !!}</h1>
{{ $slot }}
</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3312 次 |
| 最近记录: |