【问题标题】:Angular 2 - Tour of heroes: how object info is coming by only selecting <li>Angular 2 - 英雄之旅:仅通过选择 <li> 来获取对象信息
【发布时间】:2017-12-19 13:53:05
【问题描述】:

我正在浏览 Angular 4 项目“英雄之旅”https://angular.io/docs/ts/latest/tutorial/toh-pt2.html 的文档。

<li *ngFor="let hero of heroes" (click)="onSelect(hero)">{{hero.name}}</li>

当我选择任何 HERO 时会发生什么,函数 onSelect() 启动并传递特定的“英雄”对象,然后它分配给 selectedHero 以使用 this 功能显示该特定信息。

我想通过仅选择 HERO 来了解我们如何获得有关“英雄”的特定信息(以便我们可以通过 onSelect() 函数传递它)

【问题讨论】:

  • 文档在这里解释了这一切angular.io/tutorial/toh-pt2#selecting-a-hero
  • 这在本教程中很简单,它自己解释得很好@user3526127
  • 请您解释一下。我是 Javascript 和 Angular 的新手。在文档中给出了“英雄”对象,但我想知道后面发生了什么。我的意思是在选择特定的“li”时,我们也会得到“hero”对象......但是如何?
  • 不确定我是否完全理解您的问题,但(click) 是一个点击事件。这意味着当您单击事件附加到的 html 元素时,它会触发指定的函数。该元素包含每个英雄的数据,因为 *ngFor 引用了存在于打字稿中的现有 heroes 数组。 *ngFor 就像一个 for 循环,所以这里的 hero 指的是每个单独的英雄,其中包含数据。单击元素时,此数据将传递给onSelect
  • 是的,这就是我想知道的……那个特定的“li”是否包含个别英雄的数据?但在控制台中,如果我们通过 getQuerySelector 获取数据,我将找不到该数据。您能告诉我如何在控制台中显示这些数据吗?

标签: javascript angular typescript


【解决方案1】:

不完全确定你在哪里感到困惑,但让我们分解一下这条线在做什么。

<li *ngFor="let hero of heroes" (click)="onSelect(hero)">{{hero.name}}</li>

首先,*ngFor 命令创建多个列表元素,其长度等于“英雄”数组的长度。这是使用 Angular 的结构指令完成的。

在更清晰的步骤中,*ngFor 语句查看这一行“让英雄成为英雄”。 这条语句的意思是,对于数组中的每个变量,英雄,都会创建一个新的

  • 元素。然后,在所创建的
  • 元素
  • 的范围内,创建一个变量“hero”,该变量引用了英雄数组中的相应变量。这个“英雄”变量只能在创建的
  • 元素中使用和引用。

    例如,如果你有一个这样的数组:myNumArray = [1,5,7,8], 你有一个这样的列表

    <li *ngFor="let num of myNumArray" (click)="console.log(num)">{{num}}</li>
    

    它会打印出来

  • 1
  • 5
  • 7
  • 8
  • 因为每个

  • 元素中的“num”变量引用了 myNumArray 的相应变量,该变量是在使用 *ngFor 创建元素时分配的。此外,每个
  • 元素都会有一个点击事件,将 其 num 实例 记录到控制台。单击 1 将记录“1”,单击 5 将记录“5”,依此类推。

    您可以在调用“ngFor”的同一元素标记中引用此局部变量“hero”的原因是因为Angular中的一些模板魔法。 * 符号实际上跳到了调用它的元素外部并创建了一个模板。您可以在此处阅读有关 * 和 ngFor 使用的更多信息:https://angular.io/guide/structural-directives#the-asterisk--prefix

    希望这能回答您的问题并解释每个特定的“英雄”信息是如何创建的,以及它们之间的区别。

  • 【讨论】:

    • 非常好...现在我可以清楚地理解整个事情了...如果我们用任何对象代替数组,我们可以通过该插值中对应的
    • 获取属性的值 { { }}。谢谢拉斯......很清楚
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签