Laravel - 如何在视图中创建(匿名)动态刀片组件

hin*_*e02 4 laravel laravel-blade laravel-7

使用 Laravel 7 和新添加的 Blade 组件——

\n

我有一些返回数组的动态字段。数组内部包含存储为“布局”的每个“组件”,我有一个完全按照组件类命名的组件。在我的基本视图中,我循环遍历数组并渲染组件:

\n
@if ($page->content)\n    //@dd($page->content):\n    {{-- array:1 [\xe2\x96\xbc\n        0 => {#425 \xe2\x96\xbc\n            +"layout": "wysiwyg"\n            +"key": "W0yC0KtNgPV8N4ua"\n            +"attributes": {#1303 \xe2\x96\xbc\n            +"alignment": "default"\n            +"background_color": "default"\n            +"text": "<h1>Hello World</h1>"\n            }\n        }\n        ] --}}\n    @foreach ($page->content as $content)\n        <x-{{ $content->layout }} :content="$content"/>\n    @endforeach\n@endif\n
Run Code Online (Sandbox Code Playgroud)\n

但是,这不会呈现任何内容(它是空白的)。已编译刀片的源代码显示<x-wysiwyg :component="$content"/>,因此它的行为就像根本没有编译一样。但是,如果我显式更新我的 foreach 循环组件内容:<x-wysiwyg :content="$content"/>,它会工作并呈现该组件。

\n

如何动态加载组件的值?

\n

hin*_*e02 8

这实际上在 Laravel 7 中是不可能的,但很快就会在 Laravel 8 中实现:

https://twitter.com/taylorotwell/status/1265681297286082562

<x-dynamic-component :component="$componentName" class="mt-4" />
Run Code Online (Sandbox Code Playgroud)

编辑:现已发布 - https://laravel.com/docs/8.x/blade#dynamic-components