【发布时间】:2021-11-29 03:19:03
【问题描述】:
CMS 返回带有自定义元素的 HTML 和相应的 props。
<!-- index.html -->
<svelte-accordion props='{"toggleAll":true}'>
<svelte-accordion-item props='{"title":"Accordion item 1"}'>
<p>Content of the first accordion item</p>
</svelte-accordion-item>
<svelte-accordion-item props='{"title":"Accordion item 2"}'>
<p>Content of the second accordion item</p>
</svelte-accordion-item>
<svelte-accordion-item props='{"title":"Accordion item 3"}'>
<p>Content of the third accordion item</p>
</svelte-accordion-item>
</svelte-accordion>
我们的想法是为自定义元素使用 Svelte 组件,如下所示:
// Accordion.svelte
<svelte:options tag="svelte-accordion" />
<script>
export let props;
</script>
<slot parentProps={props} />
// AccordionItem.svelte
<svelte:options tag="svelte-accordion-item" />
<script>
export let props;
export let parentProps;
const { title } = JSON.parse(props);
// parentProps is undefined
console.info('__parentProps__', parentProps);
</script>
<h2>{title}</h2>
<slot />
在上面的例子中AccordionItem.svelte 无法接收到Accordion.svelte 传递的props。原因可能是props实际上是传递给Accordion.svelte内的<slot>,而不是直接传递给<svelte-accordion-item>。
我们如何解决这个问题?
感谢您的帮助!
【问题讨论】:
-
谢谢,@Pythony!插槽道具在我的情况下不起作用,可能是因为
svelte-accordion-item是由 CMS 在页面标记中动态插入的。 -
"...实际上是传递给 Accordion.svelte 中的
而不是直接传递给 你为什么不通过。" parentprops直接在index.html像<svelte-accordion-item props='{"title":"Accordion item 1"}' parentprops='{"toggleAll":true}'>?
标签: javascript frontend svelte