You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte中如何向插槽传递变量?(不使用stores)

Svelte插槽传递变量(无需Stores)

问题核心

你当前的代码中,IconWrapper已经通过插槽传递了fillColor,但Icon组件没有接收这个插槽提供的变量,导致始终使用自身的默认值#00f。下面提供两种对应你需求的解决方案:


方案1:从外部组件直接传递变量(使用#f00)

既然App组件可以直接访问Icon,无需通过插槽中转,直接给Icon传递属性即可:

修改App.svelte:

<script>
    import IconWrapper from "./IconWrapper.svelte"
    import Icon from "./Icon.svelte"
    export let fillColor = '#f00';
</script>

<IconWrapper>
  <Icon {fillColor} />
</IconWrapper>

此时Icon会直接使用App中定义的#f00作为填充色。


方案2:从插槽容器传递变量(使用#0f0或自定义值)

如果需要让IconWrapper控制传递给插槽内容的变量,需要使用作用域插槽,步骤如下:

  1. 保持IconWrapper.svelte不变(已定义插槽传递fillColor):
<script>
  export let fillColor = '#0f0';
</script>

<div>
  <slot fill={fillColor}/>
</div>
  1. 在App.svelte中接收插槽传递的变量并传给Icon:
<script>
    import IconWrapper from "./IconWrapper.svelte"
    import Icon from "./Icon.svelte"
    // 若要覆盖IconWrapper的默认值,可传递fillColor给它
    // export let fillColor = '#f00';
</script>

<IconWrapper>
  <!-- 用let:fillColor接收插槽变量,直接传给Icon -->
  <Icon let:fillColor />
</IconWrapper>

如果变量名不一致,也可以手动映射:

<IconWrapper>
  <Icon let:fill={fillColor} />
</IconWrapper>

这样Icon就会使用IconWrapper提供的#0f0(或你传给IconWrapper的自定义值)。


关键说明

插槽传递的变量必须通过let:变量名在插槽内容上接收,才能将容器的变量注入到内容组件中。这是作用域插槽的核心用法,无需依赖Stores即可实现组件间的变量传递。

内容的提问来源于stack exchange,提问作者Markstar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:43:06