Какой смысл использовать оператор присваивания после оператора жирной стрелки в Angular? - PullRequest
0 голосов
/ 22 марта 2020

У меня проблемы с пониманием метода ниже

getHeroes() {
  this.heroService.getHeroes().subscribe(heroes => this.heroes = heroes);
}

В моем понимании функция стрелки

heroes => this.heroes

в основном

function(heroes){
  return this.heroes;
}

Но что равно после this.heroes?

this.heroes = heroes

Разве this.heroes не должно быть возвращаемым значением? Как вы можете назначить что-то для возврата значения?

Документы на странице Angular просто говорят о том, что подписка () выдает массив для обратного вызова, который устанавливает свойство героев компонента. Это не очень понятно для меня.

Так что, если кто-то может помочь объяснить, что происходит внутри метода subscribe () или переписать функцию стрелки в обычной функции, был бы очень признателен.

Ответы [ 4 ]

0 голосов
/ 22 марта 2020

На самом деле heroes => this.heroes = heroes эквивалентно

heroes => {
  return (this.heroes = heroes);
}

В основном this.heroes = heroes возвращает значение в правой части выражения. Таким образом, чтобы быть более подробным, это означает:

heroes => {
  this.heroes = heroes;
  return heroes;
}

Вы передали функцию стрелки в метод .subscribe, который игнорирует возвращаемое значение функции стрелки, поэтому вполне допустимо писать таким образом.

0 голосов
/ 22 марта 2020

В контексте вашего вопроса this.heroes = heroes - это тело функции.

heroes => this.heroes = heroes

эквивалентно написанию

function setHeroes(heroes) {
  this.hereos = heroes;
}

Одно большое отличие заключается в Javascript function, ключевое слово this обозначает область действия функции. Таким образом, this.hereos = heroes не присваивает значение переменной-члену (свойство heroes) в соответствии с намерением. Это связано с тем, что Javascript не имеет понятия о классах.

В функции стрелки this обозначает область действия текущего класса. Поэтому, когда вы говорите this.heroes = heroes, значение, испускаемое наблюдаемой исходной точкой, присваивается свойству переменной-члена heroes.

. Один простой способ понять это - создать код и найти в файле main.bundle.js функция getHeroes(). Это даст хорошее представление о том, как это скомпилировано в Javascript.

0 голосов
/ 22 марта 2020
getHeroes() {
  this.heroService.getHeroes().subscribe(heroes => this.heroes = heroes);
}

this.heroService.getHeroes() подписывается, это означает, что при получении результата он будет присвоен локальному экземпляру this.heroes.

Вы можете вызывать его как хотите, например, это также работа:

this.heroService.getHeroes().subscribe(result => this.heroes = result);

Надеюсь, это прояснит.

0 голосов
/ 22 марта 2020
heroes => this.heroes = heroes

эквивалентно:

heroes => { 
  this.heroes = heroes;
}

, что означает, что он будет выполнять код после жирной стрелки.

"каждый раз, когда наблюдаемое излучает, присваивается полю this.heroes значение, отправленное "

Как и обычные функции, функции-стрелки также могут просто выполнять код без явного возврата чего-либо. (Мы говорим, что вы хотите выполнить функцию для ее побочного эффекта ).

Технически, это то же самое, что и возврат. Просто здесь возвращаемое значение обратного вызова subscribe полностью игнорируется.

return this.heroes = heroes; фактически выполнен. Но возвращаемое значение игнорируется, поэтому было бы странно, если бы оно было явно написано. Присвоение в возвращении является побочным эффектом, который фактически является всей важной частью кода.

...