我正在浏览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 });
}
答案 0 :(得分:1)
因为否则你会违反所谓的"数据封装"概念和您的应用程序可能会表现得非常奇怪。 Service.ts类是一个单例(像往常一样),所有注入它的组件都共享它的相同实例。
因此,在所有这些组件中,this.configService.getConfig().subscribe(data =>
,data
对象是一个对象。如果组件没有克隆它,只是分配它的引用,后来有人改变data
,一些奇怪的东西会开始,因为组件this.config
被认为是一个静态对象(在订阅完成后)如果你不克隆它,它会引用你服务中的data
作为动态对象。
通常,Javascript通过引用来分配对象,因此它总是更容易克隆事物并将数据分开并在一个地方改变事物 - 所谓的数据存储。 Angular service.ts等同于数据存储。
多数民众赞成我将如何解释它。很想看到更多的答案。