Http客户端角度

时间:2018-06-10 15:25:11

标签: angular http asynchronous subscribe

我对理解异步角度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);

没关系。请解释一下为什么这(从我的观点来看两个代码是一样的)构造不好?

1 个答案:

答案 0 :(得分:0)

JavaScript通过 value 传递函数参数。对于对象,我们有通过值复制的对象引用(内存地址)。在这种情况下,this.temperatureDailyCharts是对象的引用,此引用将被复制到getDailyParameterCharts()函数的激活记录中。在分配中,您覆盖(重新分配)此复制的引用 - 这当然不会对原始引用(ngOnInit()中的本地值)产生影响。

编辑:有时"按值传递引用"也被称为"通过引用传递"。您可以在此处阅读更多内容:https://codeburst.io/javascript-pass-by-value-and-pass-by-reference-in-javascript-fcf10305aa9c