Blade(Livewire)调用laravel-modules动态组件原生标签语法失效问题
问题原因
Blade 模板对 <livewire: 开头的组件标签采用编译期静态解析规则,标签名位置不支持嵌入 {{ }} 动态变量:你写的 {{ $module->getLowerName() }} 会在模板编译阶段被当成普通字符串处理,不会被替换为实际的模块名,因此框架无法匹配到对应的组件,导致渲染失败。
而 @livewire() 指令是运行时解析的,所以传入动态拼接的组件名可以正常生效。
标签式语法实现方案
用 Livewire 内置的动态组件标签 <livewire:dynamic-component> 即可实现需求,它的 is 参数支持传入动态组件名,写法如下:
@foreach($modules as $module) <livewire:dynamic-component :is="$module->getLowerName() . '::configuration'" :client="$client" /> @endforeach
注意事项
确保每个模块的配置组件已经按照 laravel-modules-livewire 的规则正确注册,组件别名与拼接后的字符串完全匹配即可。
内容的提问来源于stack exchange,提问作者Tales
相关产品推荐
相关产品推荐

