到目前为止,我一直在执行以下操作,将订阅的值分配给我的类上的属性:
export class ExampleComponent implements OnInit {
exampleId: string;
constructor(public route: ActivatedRoute) {
this.route.params.subscribe((params: Params) => this.exampleId = params.id);
}
ngOnInit() {
// Do something with exampleId here...
}
}
努力摆脱变异,更多地转向不变性;我希望将从该订阅返回的值分配给exampleId
属性,而无需在构造函数中执行此操作。
最好的方法是什么?
答案 0 :(得分:1)
您从构造函数发出的任何异步请求意味着您的Component
将不会是不可变的:它必然有两个状态;在数据解决之前和之后。
因此,如果您需要一个不可变组件,则必须将异步部分移出Component
并在构造之前获取数据。对于您提供的示例,可以使用路由解析服务和路由配置中的resolve
对象来完成此操作。然后路由器将在实例化组件之前解析数据,并且可以通过ActivatedRouteSnapshot.data
访问它。
对于更通用的情况,当该类依赖于异步数据时使任何类不可变,您需要某种工厂来解析数据并使其可用于构造中的类(此处路由器就是该工厂)。