我正在尝试将 Lit-Element 与由 SVG 元素包裹的单个插槽一起使用。
但似乎<slot>
位于<svg>
不接受渲染给定的 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 建议使用 a<foreignObject>
将 HTML(即插槽)与 SVG 混合。不幸的是,这不起作用,因为在插槽中它仍然是 SVG 元素。
2019-02-19 更新
使用在函数内部表达的 JavaScript render()
,我试图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
计算事物。瞧!