我对理解异步角度http客户端有疑问。我有用Java编写的后端部分,其中端点返回具有相同格式但含义不同的数据。所以我决定创建以下代码:
export class AppComponent implements OnInit{
temperatureDailyCharts: Chart[] = new Array();
constructor(private weatherService: WeatherService){}
ngOnInit(): void {
this.getDailyParameterCharts("temperature", this.temperatureDailyCharts);
}
getDailyParameterCharts(parameter: string, chartList: Chart[]) {
this.weatherService.getDailyParameter(1, parameter)
.subscribe(response => chartList = response);
}
}
下一步是将this.temperatureDailyCharts[0]
注入子组件,并等待ngOnChange
。此代码无法正常运行,因为ngOnChanges
方法永远不会调用。如果我将订阅部分更改为显式符号值
.subscribe(response => this.temperatureDailyCharts = response);
没关系。请解释一下为什么这(从我的观点来看两个代码是一样的)构造不好?
答案 0 :(得分:0)
JavaScript通过 value 传递函数参数。对于对象,我们有通过值复制的对象引用(内存地址)。在这种情况下,this.temperatureDailyCharts
是对象的引用,此引用将被复制到getDailyParameterCharts()
函数的激活记录中。在分配中,您覆盖(重新分配)此复制的引用 - 这当然不会对原始引用(ngOnInit()
中的本地值)产生影响。
编辑:有时"按值传递引用"也被称为"通过引用传递"。您可以在此处阅读更多内容:https://codeburst.io/javascript-pass-by-value-and-pass-by-reference-in-javascript-fcf10305aa9c