如何将@Inject(MAT_DIALOG_DATA)移出TypeScript类构造器?
解决方案
对于带@Inject()装饰器的依赖注入,同样可以用inject()函数实现,无需保留构造器。直接在类属性中使用inject()传入对应的注入令牌即可:
private readonly data = inject(MAT_DIALOG_DATA);
如果需要将data设为public(和原代码一致),写法如下:
public data = inject(MAT_DIALOG_DATA);
完整示例对比
原构造器注入写法:
constructor(@Inject(MAT_DIALOG_DATA) public data: string ) {}
替换后的无构造器写法:
export class YourDialogComponent { public data: string = inject(MAT_DIALOG_DATA); // 其他组件逻辑... }
注意事项
- 必须在注入上下文中调用
inject():比如类的属性初始化阶段、构造器内部(尽量避免),或ngOnInit之前的生命周期钩子中。 - 若需要类型约束,可显式声明属性类型,确保类型安全。
内容的提问来源于stack exchange,提问作者The Fabio
相关产品推荐
相关产品推荐

