为什么 Angular 组件必须克隆服务返回的对象?
Why must an Angular component clone an object returned by a service?
我正在查看 Angular Fundamentals 部分中的 HttpClient 页面,我想知道为什么组件必须 克隆 从服务接收的对象,使HTTP 调用?
我所说的页面上(在 this section 中)的特定 config.component.ts
代码块是这个:
config: Config;
showConfig() {
this.configService.getConfig()
// clone the data object, using its known Config shape
.subscribe(data => this.config = { ...data });
}
因为否则你会违反所谓的 "data encapsulation" 概念,你的应用程序可能会表现得很奇怪。 Service.ts class 是一个单例(像往常一样)并且注入它的所有组件共享它的同一个实例。
所以在所有这些组件中,this.configService.getConfig().subscribe(data =>
、data
对象是一个对象。如果组件不克隆它,只是分配它的引用,后来有人改变了 data
,一些奇怪的事情就会开始,因为在组件中 this.config
被认为是一个静态对象(在订阅完成后)并且如果您不克隆它,它会引用您服务中的 data
,这是一个动态对象。
一般来说,Javascript 通过引用分配对象,因此克隆事物并保持数据分离并在一个地方改变事物总是更安全 - 所谓的数据存储。 Angular service.ts 相当于数据存储。
我就是这么解释的。很想看到更多答案。
我正在查看 Angular Fundamentals 部分中的 HttpClient 页面,我想知道为什么组件必须 克隆 从服务接收的对象,使HTTP 调用?
我所说的页面上(在 this section 中)的特定 config.component.ts
代码块是这个:
config: Config;
showConfig() {
this.configService.getConfig()
// clone the data object, using its known Config shape
.subscribe(data => this.config = { ...data });
}
因为否则你会违反所谓的 "data encapsulation" 概念,你的应用程序可能会表现得很奇怪。 Service.ts class 是一个单例(像往常一样)并且注入它的所有组件共享它的同一个实例。
所以在所有这些组件中,this.configService.getConfig().subscribe(data =>
、data
对象是一个对象。如果组件不克隆它,只是分配它的引用,后来有人改变了 data
,一些奇怪的事情就会开始,因为在组件中 this.config
被认为是一个静态对象(在订阅完成后)并且如果您不克隆它,它会引用您服务中的 data
,这是一个动态对象。
一般来说,Javascript 通过引用分配对象,因此克隆事物并保持数据分离并在一个地方改变事物总是更安全 - 所谓的数据存储。 Angular service.ts 相当于数据存储。
我就是这么解释的。很想看到更多答案。