Angular:在构造函数中声明并分配 属性 依赖项
Angular: Declare and assign property of a dependency inside constructor
这是我在开发中多次遇到的案例
假设我有一个具有服务依赖性的组件,该组件具有我需要的一些可观察属性。
我可以像这样声明和分配它们:
files$: Observable<...>;
fileTypes$: Observable<...>;
constructor(fileService: FileService) {
this.files$ = fileService.files$;
this.fileTypes$ = fileService.fileTypes$;
}
但是在有很多属性的情况下,或者 Observable 的类型(在本例中为 ...
)很长的情况下,这可能会无缘无故地变得臃肿。
我尝试了以下解决方案,它会给我自动类型推断:
constructor(fileService: FileService,
public files$ = fileService.files$,
public fileTypes$ = fileService.fileTypes$
) {}
然而,当 运行 时,出现以下错误:
"Can't resolve all parameters for FilemanagerComponent: ([object Object], ?, ?)."
在参数中添加 @Optional()
没有帮助。
另一个解决方案是简单地将服务声明为 public
,然后在模板中使用它的 属性,但我不太喜欢这个解决方案,因为它从类型安全。
有什么干净的方法可以做到这一点吗?
您可以简单地使用
files$ = this.fileService.files$;
fileTypes$ = this.fileService.fileTypes$;
constructor(private fileService: FileService) {}
但是你的第一个解决方案绝对没问题。好的 IDE 会使用一个键盘快捷键为您添加属性声明。在组件中声明类型(而不是仅在服务中声明)使代码更易于阅读和理解,恕我直言。
这是我在开发中多次遇到的案例
假设我有一个具有服务依赖性的组件,该组件具有我需要的一些可观察属性。
我可以像这样声明和分配它们:
files$: Observable<...>;
fileTypes$: Observable<...>;
constructor(fileService: FileService) {
this.files$ = fileService.files$;
this.fileTypes$ = fileService.fileTypes$;
}
但是在有很多属性的情况下,或者 Observable 的类型(在本例中为 ...
)很长的情况下,这可能会无缘无故地变得臃肿。
我尝试了以下解决方案,它会给我自动类型推断:
constructor(fileService: FileService,
public files$ = fileService.files$,
public fileTypes$ = fileService.fileTypes$
) {}
然而,当 运行 时,出现以下错误:
"Can't resolve all parameters for FilemanagerComponent: ([object Object], ?, ?)."
在参数中添加 @Optional()
没有帮助。
另一个解决方案是简单地将服务声明为 public
,然后在模板中使用它的 属性,但我不太喜欢这个解决方案,因为它从类型安全。
有什么干净的方法可以做到这一点吗?
您可以简单地使用
files$ = this.fileService.files$;
fileTypes$ = this.fileService.fileTypes$;
constructor(private fileService: FileService) {}
但是你的第一个解决方案绝对没问题。好的 IDE 会使用一个键盘快捷键为您添加属性声明。在组件中声明类型(而不是仅在服务中声明)使代码更易于阅读和理解,恕我直言。