当前位置: 首页 > 知识库问答 >
问题:

将ngFor变量传递给ngIf模板

姚凯歌
2023-03-14

如果ngFor循环使用带有then/else语法的模板,如何将ngFor循环中的当前变量传递给ngIf?

当内联使用时,它们似乎通过罚款,但不能从模板访问,例如:

<ul *ngFor="let number of numbers">
  <ng-container *ngIf="number % 2 == 0; then even_tpl; else odd_tpl"><>/ng-container>
</ul>


<ng-template #odd_tpl>
  <li>Odd: {{number}}</li>  
</ng-template>

<ng-template #even_tpl>
  <li>Even: {{number}}</li>  
</ng-template>

模板似乎根本无法访问数字,但如果内联使用,它可以工作。

在下面的链接中有一个工作和不工作版本的完整例子

共有3个答案

狄楷
2023-03-14

这是因为模板作用域的工作方式。Angular中的模板具有动态作用域,而不是常规的javascript词法作用域,这意味着ng-模板中的{{数字}}表达式没有指向*ngFor中相同的数字变量,尽管人们应该认为它会,因为您正在评估的模板表达式

如果您实际上在 AppComponent 中定义了一个 number 属性,假设 number = 42,您可以看到里面 的所有 {{number}} 表达式

因此,要么应该在< code>*ngFor的范围内定义模板,其中< code>number变量具有所需的值,要么以某种方式将该值传递给< code>even_tpl和< code>odd_tpl。正如@Vivek所指出的,您可以使用< code>ngTemplateOutlet和< code > ngTemplateOutletContext 来实现这一点。

孔安阳
2023-03-14

看这里:在Angular 2模板中传递变量

<div *ngFor="foo in foos">
    <ng-container *ngTemplateOutlet="inner; context:{name:foo}"></ng-container>
</div>
<ng-template #inner let-name="name">
    {{ name }}
</ng-template>
融唯
2023-03-14

您所需要的只是使用 [ngTemplateOutletContext] 阅读更多

以下是您如何实现这一目标的方法:

<div>
  <h3>All Templates</h3>
  <ul *ngFor="let number of numbers">
    <ng-container [ngTemplateOutlet]='number % 2 == 0 ? even_tpl : odd_tpl' [ngTemplateOutletContext]="{number:number}"></ng-container>
  </ul>
</div>

<ng-template #odd_tpl let-number='number'>
  <li>Odd: {{number}}</li>  
</ng-template>

<ng-template #even_tpl let-number='number'>
  <li>Even: {{number}}</li>  
</ng-template>

工作演示

 类似资料:
  • 问题内容: 我有Google地图提供的JavaScript值,需要将其保存在MySQL数据库中。 其实我有变量 我需要将该变量传递给PHP变量lugar 问题答案: 如果要在页面转换时进行操作,则可以通过表单或在URL中传递它,然后仅使用或接收变量。 如果您需要无缝完成它,那么您可能需要考虑使用AJAX。

  • 问题内容: 我有一个使用while循环创建的按钮。所以while循环为mysql表中的每一行创建一个表行。 我为该按钮编写了一行代码,该代码针对表的每一行再次创建,并且每个按钮基于该记录具有不同的值。 问题是我想使用它并以模式查看它,以便可以使用mysqli查询检索具有相同ID的记录。 这是模态的代码。 问题答案: 如果可以,我对你是正确的。 模态触发按钮 Bootstrap Modal事件以使用

  • 我有以下设置。我正在尝试动态加载 a.py 模块(在这种情况下从 c.py 加载,并将其调用为BeLoaded)。然后我想导入另一个模块文件B,它有一个类,该类将继承该类到BeLoaded.otherClass。我知道如果我在 b.py 中导入 c.py 可以解决问题,但由于我是动态加载 c.py,我不确定如何做到这一点。如果我可以在导入变量之前以某种方式将变量传递给 b.py,它将起作用,但我不

  • 问题内容: 我有一个PHP会话变量,在整个会话过程中仍然有效。在开头部分,我包含了我的JavaScript文件。 如果需要以下内容,如何将会话变量传递到JavaScript文件中。 由于无法在JavaScript文件中识别出,因此上面的代码不起作用。因此,我必须放入PHP文件本身,但是如何将其保留在JavaScript文件中? 问题答案: 在您的PHP文件中,您可以将用户设置为全局变量: 在包含外

  • 问题内容: 如果我有一个指令,我可以这样调用它 我该如何访问?我在函数中使用时会得到实际的字符串。当我检查html时,实际上说。 问题答案: 尝试 然后 演示:柱塞

  • 问题内容: 如何在不刷新页面的情况下将变量从jQuery传递到PHP?当我单击一个复选框时,我想将一个变量从jQuery传递到PHP。我也在使用formdialog。 我的PHP代码 我的JavaScript代码 问题答案: Ajax可以做到这一点。谷歌它,并检查api.jquery.com并查看ajax函数,.ajax(),.post(),.get(),.load()等。 关于您的特定问题,这是