Http клиент в угловой - PullRequest
0 голосов
/ 10 июня 2018

У меня проблема с пониманием асинхронного углового 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 голосов
/ 10 июня 2018

JavaScript передает аргументы функции по значению .В случае объектов у нас есть ссылки на объекты (адреса памяти), которые копируются по значению.В этом случае this.temperatureDailyCharts является ссылкой на объект, эта ссылка копируется в запись активации функции getDailyParameterCharts().В назначениях вы переопределяете (переназначаете) эту скопированную ссылку - что, конечно, не влияет на исходную ссылку (которая является локальным значением в ngOnInit()).

Правка: иногда "передачассылка по значению »также называется« передача по ссылке ».Вы можете прочитать больше здесь: https://codeburst.io/javascript-pass-by-value-and-pass-by-reference-in-javascript-fcf10305aa9c

...