将订阅的值分配给 class 的 属性 而不进行突变

Assign value of a subscription to the property of a class without mutation

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

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 属性 而无需在构造函数中这样做。

解决此问题的最佳方法是什么?

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

因此,如果您想要一个不可变的组件,您必须将异步部分移出 Component 并在构建之前获取数据。对于您给出的示例,可以使用路由解析服务和路由配置中的 resolve 对象来完成。然后router会解析组件实例化前的数据,可以通过ActivatedRouteSnapshot.data.

访问

对于更一般的情况,当 class 依赖于异步数据时使任何 class 不可变,您需要某种工厂来解析数据并使其可用于 class在建设中(这里路由器就是那个工厂)。