订阅Angular中的Observable的箭头功能的正确解释是什么?

时间:2018-11-14 10:02:39

标签: angular typescript arrow-functions angular-observable

我正在关注Angular官方教程:https://angular.io/tutorial/toh-pt4

如您所见,有一种订阅服务的组件类:

import { Component, OnInit } from '@angular/core';

import { Hero } from '../hero';
import { HeroService } from '../hero.service';

@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {

  selectedHero: Hero;

  heroes: Hero[];

  constructor(private heroService: HeroService) { }

  ngOnInit() {
    this.getHeroes();
  }

  onSelect(hero: Hero): void {
    this.selectedHero = hero;
  }

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

我对此组件的getHeroes()方法有疑问:

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

我知道我的服务返回了一个Observable<Hero[]>,因为它是异步的,我必须订阅。

我唯一无法完全理解的是内部表达式(我认为它称为lambda),它是: heroes => this.heroes = heroes

此表达式的确切含义是什么?

1 个答案:

答案 0 :(得分:2)

您是正确的,它确实是lambda,但是在js中它们通常被称为箭头函数。它们的功能相同。

lambda等于:

(function (heroes) { return _this.heroes = heroes; });

因此,它需要一个参数,然后将其存储在本地属性中。

您的代码段中的Observable也可以写成:

this.heroService.getHeroes()
   .subscribe((heroes: Hero[]) => {
      this.heroes = heroes;
   });

更清楚返回的内容。