*ngFor 如何与 Angular 2 中的模板变量一起工作?

Posted

技术标签:

【中文标题】*ngFor 如何与 Angular 2 中的模板变量一起工作?【英文标题】:How *ngFor works with template variables in angular 2? 【发布时间】:2017-08-02 00:31:24 【问题描述】:

主要组件:

html

<event-thumbnail *ngFor='let event1 of events' #thumbnail  [event2]="event1" (eventClick)='handleEventClicked($event)'>Hello</event-thumbnail>
<button class='btn btn-primary' (click)="thumbnail.alertFoo()">alert id</button>
<button class='btn btn-primary' (click)='thumbnail.handleClickMe()'>click me!</button>

事件-缩略图组件

  alertFoo()
    alert("id called");
  

  handleClickMe()
    this.eventClick.emit('foo');
    alert('click');
  

在上面的代码中,我无法在使用 *ngFor 时使用缩略图 -> 模板变量的按钮,即。不会通过缩略图调用 alertFoo 和 handleClickMe()。我也尝试将它包装在 div 中,但它仍然不起作用。它仅在我使用 *ngFor 将整个代码包含在 div 中时才有效,即还有显示不需要的多个按钮的按钮。我想了解 ngFor 的工作原理是否有一些解决上述问题的方法,我希望重复事件但按钮只显示一次。

【问题讨论】:

这些方法到底是什么?前缀thumbnail 指的是什么?不太清楚,这就是我问的原因。您提供很少的代码来尝试解决此问题。最好是如果您可以在 plunker 中重现该问题... :) @AJT_82 我认为上面的代码是自我解释的......如果你知道 angular2 #thumbnail 是模板变量,它指的是事件缩略图模板我试图调用 alertzfoo() 和 handleClickMe () 方法通过模板变量 thumbnail 存在于 event-thumbnail 组件中,当我将所有内容封装在一个 div 中时,该方法在上述代码中不起作用我看到我的页面中填充了多个按钮,因为它也成为 ngFor 的一部分。 不,代码不是不言自明的,但现在更清楚了,因为您提供了这些方法的位置,即在 event-thumbnail 组件中。 @AJT_82 好的,我想现在清楚多了....? 是的,所以我为你准备了一个答案:) 【参考方案1】:

为此目的使用ViewChild。这是一个例子。由于不确切知道您的组件是如何命名的,因此我在这里使用了虚拟名称。所以家长:

模板:

<button (click)="alertFooInChild()">Click</button>

TS:

@ViewChild(AppChild) appChild: AppChild;

alertFooInChild() 
  // call the method in the child
  this.appChild.alertFoo();

这是demo plunker :)

【讨论】:

这很好,感谢您的帮助......我还想知道 ViewChild 的范围仅适用于 parent 和 child 分支是否可以为 child 和 child 提供类似的功能。例如,我在 parent child1 和 child2 中有两个组件文件夹,我可以为 child1 和 child2 拥有相同的文件夹,因为上面的内容仅在我为 parent 和 child 执行时才有效。我正在使用 Angular CLI 自动生成组件。 不客气,很高兴我能帮上忙。是的,这个解决方案适用于父母和孩子。如果您需要其他组件通信,共享服务可能是要走的路:)

以上是关于*ngFor 如何与 Angular 2 中的模板变量一起工作?的主要内容,如果未能解决你的问题,请参考以下文章

带有 ngFor 输入的 Angular 2 模板驱动表单

如何在 Angular 中为 ngfor 为 html 模板键入变量?

在 div 中使用 ngFor 时,Angular 2 模板解析错误

使用ngFor kendo grid angular 2为特定列提供宽度和ng模板?

在 Angular 2 中打破 NgFor 循环

如何在Angular 2中选择ngFor中的所有过滤复选框?