Brick Next 中如何正确传递 slot 内容到自定义构件?

Zz艳清 阅读 4

我在用 Brick Next 开发低代码页面时,想把一段 HTML 内容通过 slot 传给自定义的 brick 构件,但发现内容没渲染出来。我试过直接在构件标签里写内容,也检查了构件内部是否用了 <slot></slot>,但还是不行。

这是我在 storyboard 里写的用法:

<my-custom-card>
  <div class="card-header">标题</div>
  <p>这里是内容</p>
</my-custom-card>

构件内部确实有 <slot></slot>,但页面上完全空白,控制台也没报错,到底哪里出问题了?

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
Tr° 玉研
啊这个问题我踩过坑!根本原因是 Brick Next 对 slot 的处理和原生 Web Components 有些细微差别。让我详细解释下:

首先确认你的构件注册方式是否正确。Brick Next 要求用 defineComponent 声明式注册,而不是直接继承 HTMLElement。正确的构件定义应该是这样的:

// my-custom-card.js
defineComponent({
template:
<div class="card">
<slot></slot>
<div>

});


然后重点来了,Brick Next 的 slot 内容需要用特殊的 brick-slot 属性标记,而不是直接写在标签里。你的 storyboard 应该改成:

<my-custom-card>
<div brick-slot="">
<div class="card-header">标题</div>
<p>这里是内容</p>
</div>
</my-custom-card>


为什么这样设计?因为 Brick Next 的渲染引擎需要明确区分哪些是构件的属性,哪些是 slot 内容。那个空的 brick-slot 属性就是标记用的。

还有几个常见踩坑点:
1. 确保你的构件在 storyboard 的 useBricks 里正确引用了
2. slot 内容必须包裹在一个根元素里(上面例子中的 div)
3. 如果 slot 有命名,需要同时设置 brick-slotslot 属性

如果还是不行,建议检查构件是否正常加载了。可以在构件代码里加个 console.log 调试下。这个机制确实有点反直觉,我第一次用的时候也折腾了好久。
点赞
2026-03-09 12:07