单击时发送 *ngFor 值作为参数

Posted

技术标签:

【中文标题】单击时发送 *ngFor 值作为参数【英文标题】:Send *ngFor value as parameter on click 【发布时间】:2017-02-20 03:37:52 【问题描述】:

我正在 Angular 2 中制作一个小应用程序,我正在显示一个包含一些数据的表格,我想在点击表格时获取这些数据

代码如下:

html 模板:

<tr *ngFor="let users of usersdata; let i = index">
     <td (click)="data(users.username)">users.username</td>
     <td (click)="data(users.email)">users.email</td>
     <td (click)="data(users.id)">users.id</td>
     <td (click)="data(users.roleId)">users.roleId</td>
</tr>

这是我的组件:

data(data: string) 
    this.selectedParam.emit(data);
    console.log(data);

当我点击我得到这个错误:

EXCEPTION: Error in .../userslist.component.html:22:16 caused by: self.parent._el_24 is not a function

【问题讨论】:

/userslist.component.html:22:16 的代码是什么? 您能发布您的完整组件吗? selectedParam 应定义为 EventEmitter 并在此处使用 Output() 进行注释。 你也可以在你的数据中尝试$event($event)。 $event 包含所有值和引用 【参考方案1】:

你需要像这样在组件中创建一个公共数组。

公共用户数据:任何;

data(data: string) 
this.usersdata = data;
console.log(this.usersdata);

现在您可以在 html 模板中访问

<tr *ngFor="let users of usersdata; let i = index">
 <td (click)="data(users.username)">users.username</td>
 <td (click)="data(users.email)">users.email</td>
 <td (click)="data(users.id)">users.id</td>
 <td (click)="data(users.roleId)">users.roleId</td>

data(data: string) 
this.selectedParam.emit(data);
console.log(data);

上面不要保持函数名和参数名相同,因为这可能会导致问题。更改参数名称

data(datavalue: string)  
  this.selectedParam.emit(datavalue); 
  console.log(datavalue); 

【讨论】:

【参考方案2】:

查看EventEmitter documentation,您的自定义组件应该基本上看起来像那里的示例,实现Output() 指令和EventEmitter

【讨论】:

【参考方案3】:

使用[(ngModel)] 将数据以两种方式绑定到组件。如下所示

<td [(ngModel)]="users.username" (click)="data(users.username)">users.username</td>

也试试

//$event will hold value and other reference.
data($event: any) 


您可以在 [] 和 () 符号的 angular2 方面获得更多参考

【讨论】:

以上是关于单击时发送 *ngFor 值作为参数的主要内容,如果未能解决你的问题,请参考以下文章

使用 *ngFor 并从中提交值的动态表单

编辑值时输入失去焦点。使用 ngFor 和 ngModel。角5

如何更改在 ngFor 中单击的每个 div 的背景颜色?

Swift 在按钮单击上发送标签文本作为解析对象值

检索表中 *ngFor 元素的 ID - Angular

在按钮单击时使用参数调用 mvc 操作 [重复]