【发布时间】:2019-06-07 07:27:50
【问题描述】:
我无法解决这个 .subscribe 方法内部发生的事情。
getHeroes(): void {
this.heroService.getHeroes()
.subscribe(heroes => this.heroes = heroes);
}
我一直认为this.heroes = heroes 被分配给了英雄组件内部的heroes:Hero[]。事实证明,事实并非如此。如果我将heroes:Hero[] 更改为heroes:boolean,或者即使我从英雄组件中完全删除heroes:Hero[],我的英雄仍然会显示。 this.heroes 仍然被分配。
谁能解释一下这是怎么回事?
尝试执行我提到的操作并删除 heroes:Hero[] 并注意英雄仍然如何显示。如果this.heroes = heroes 没有分配给heroes:Hero[],那么订阅方法内部到底发生了什么?
【问题讨论】:
-
它将你从服务中获得的英雄分配给类的英雄属性。
heroes: Hero[]纯粹是 TypeScript,它在运行时不存在。 JavaScript 不关心您是否分配给任意属性,或者您是否分配“正确”的类型; 这就是 TypeScript 存在的原因。 -
内部
HeroesComponentthis.heroes代表来自HeroesComponent的heroes: Hero[]。在getHeroes方法中,您从HeroService获取所有英雄,然后通过this.heroes = heroes将结果分配给组件的英雄列表。 -
你的,
this.heroes = heroes是否有可能没有从 hero 组件中分配给英雄列表,而是将自己分配给(heroes)的方法参数,然后显示它的 observable从方法参数中的 hero.service 中检索到? -
@jonrsharpe,如果 TypeScript 会被简单地溢出,这难道不会违背它的目的吗?我不明白为什么在这种情况下它会溢出,但在许多其他情况下,如果所有类型都不匹配,打字稿将不允许我编译。
标签: javascript angular typescript subscribe