【发布时间】:2019-07-12 03:18:10
【问题描述】:
我正在尝试将 Lit-Element 与由 SVG 元素包裹的单个插槽一起使用。
但似乎位于<svg> 中的<slot> 不接受渲染给定的SVG 元素。
什么在自定义组件中不起作用:
render() {
return html`
<svg>
<slot><circle id="defaultCircle" cx=... cy=...></circle></slot>
</svg>`
}
这里是一个例子:https://stackblitz.com/edit/wy6bhj?file=index.html
知道为什么吗?有什么选择吗?
2019-02-18 评论
Justin Fagnani 建议使用<foreignObject> 将 HTML(即插槽)与 SVG 混合。不幸的是,这不起作用,因为在插槽中它仍然是 SVG 元素。
2019-02-19 更新
使用 render() 函数中的 JavaScript 表达式,我尝试使用 this.children 迭代并在模板中添加子项。现在,使用检查器,它在 DOM 中正确显示,但 SVG 元素没有呈现任何内容。我迷路了,不明白为什么没有渲染圆圈。
https://stackblitz.com/edit/wy6bhj-hne7wl?file=my-element.js
2019-02-19 UPADTE2
我终于明白,我不可能按照最初想要的方式做到这一点。 我选择按原样传递 SVG 容器。
<my-element>
<svg> ... </svg>
</my-element>
然后<my-element> 使用
const SVG_CONTAINER = this.children[0]
const NODES = SVG_CONTAINERS.children
计算事物。瞧!
【问题讨论】:
-
为什么在
<slot>中包含任何内容? -
如果组件中没有传递任何内容,则插槽内的
是默认值。 -
更新:我现在正在尝试使用 JavaScript 来遍历传递的子元素并将它们添加到自定义元素中
-
也许可以创建一个官方的 rfc svg 规范请求以允许 svg 中的插槽元素并将其链接到此处。
标签: javascript svg web-component lit-element