将订阅的值分配给没有变异的类的属性

时间:2017-10-04 10:56:21

标签: angular typescript rxjs immutability object-oriented-analysis

到目前为止,我一直在执行以下操作,将订阅的值分配给我的类上的属性:

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属性,而无需在构造函数中执行此操作。

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

您从构造函数发出的任何异步请求意味着您的Component将不会是不可变的:它必然有两个状态;在数据解决之前和之后。

因此,如果您需要一个不可变组件,则必须将异步部分移出Component并在构造之前获取数据。对于您提供的示例,可以使用路由解析服务和路由配置中的resolve对象来完成此操作。然后路由器将在实例化组件之前解析数据,并且可以通过ActivatedRouteSnapshot.data访问它。

对于更通用的情况,当该类依赖于异步数据时使任何类不可变,您需要某种工厂来解析数据并使其可用于构造中的类(此处路由器就是该工厂)。