如何将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
相关产品推荐
相关产品推荐

