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

如何将Ngrx Signal Store作为组件的必填输入参数传递

解决Ngrx Signal Store作为必填输入属性的类型问题

首先要明确Store实例类型和Store类类型的区别:

  • ListingAddInfoStore是实例类型(即通过new ListingAddInfoStore()或inject得到的对象类型)
  • typeof ListingAddInfoStore是类的构造函数类型,并非你需要的实例类型

你之前的问题核心是把「注入逻辑」和「输入属性定义」混在了一起——input.required是用来定义组件的外部传入属性,不需要结合inject使用,因为注入是组件自身获取依赖,而输入属性是接收父组件传递的实例。

正确的写法如下:

子组件中定义必填输入属性

listingAddInfoStore = input.required<ListingAddInfoStore>();

父组件中传入Store实例

先在父组件中注入或创建Store实例,再通过模板绑定传递给子组件:

@Component({
  // 组件元数据...
  imports: [YourChildComponent],
})
export class ParentComponent {
  private listingAddInfoStore = inject(ListingAddInfoStore);
}
<!-- 父组件模板 -->
<your-child-component [listingAddInfoStore]="listingAddInfoStore"></your-child-component>

为什么之前的写法失败?

你之前的input(inject(ListingAddInfoStore))是让组件自己注入Store,而非接收外部传入值。改用input.required时,必须移除内部的inject调用,因为input.required的泛型指定的是外部传入值的类型,也就是Store实例类型ListingAddInfoStore,这样类型就能完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:24:52