为什么Angular组件必须克隆服务返回的对象?

时间:2018-02-09 10:51:49

标签: angular angular5 angular-httpclient

我正在浏览Angular Fundamentals部分中的HttpClient页面,我想知道为什么组件必须克隆从发出HTTP调用的服务收到的对象?

我正在谈论的页面上的特定config.component.ts代码块(在this section中)是这样的:

config: Config;

showConfig() {
  this.configService.getConfig()
    // clone the data object, using its known Config shape
    .subscribe(data => this.config = { ...data });
}

1 个答案:

答案 0 :(得分:1)

因为否则你会违反所谓的"数据封装"概念和您的应用程序可能会表现得非常奇怪。 Service.ts类是一个单例(像往常一样),所有注入它的组件都共享它的相同实例。

因此,在所有这些组件中,this.configService.getConfig().subscribe(data =>data对象是一个对象。如果组件没有克隆它,只是分配它的引用,后来有人改变data,一些奇怪的东西会开始,因为组件this.config被认为是一个静态对象(在订阅完成后)如果你不克隆它,它会引用你服务中的data作为动态对象。

通常,Javascript通过引用来分配对象,因此它总是更容易克隆事物并将数据分开并在一个地方改变事物 - 所谓的数据存储。 Angular service.ts等同于数据存储。

多数民众赞成我将如何解释它。很想看到更多的答案。