angular5 - Angular 5将单击事件的数据从父组件传递到在父组件单击的按钮上的子组件
问题描述
我在表中有一些数据绑定,点击任何特定的我想显示当前点击的对象更多相关数据到另一个组件(子组件)
例如我从这个链接获取的数据:http: //jsonplaceholder.typicode.com/users
HTML 代码:
<table>
<thead>
<th>
Id
</th>
<th>
name
</th>
<th>
username
</th>
<th>
email
</th>
<th>
street
</th>
<th>
suite
</th>
<th>
zipcode
</th>
<th>
phone
</th>
<th>
website
</th>
</thead>
<tbody>
<tr *ngFor="let data of httpdata">
<td>{{data.id}}
</td>
<td>{{data.name}}
</td>
<td>{{data.username}}
</td>
<td>{{data.email}}
</td>
<td>{{data.address.street}}
</td>
<td>{{data.address.city}}
</td>
<td>{{data.address.suite}}
</td>
<td>{{data.address.zipcode}}
</td>
<td>{{data.phone}}
</td>
<td>{{data.website}}
</td>
<td>
<a routerLink="/conflict-details/conflict" (click)="onSelect(data)">Go to
</a>
</td>
</tr>
</tbody>
</table>
如果您看到当我单击任何特定数据时我在表格中有一个转到按钮,它应该向我显示有关当前单击的完整信息,但在我的情况下,当我单击转到特定时,我想将数据绑定到另一个组件中所有 td 数据都应显示在新组件(子)中。
很简单,我想跟踪子组件中选定数据的点击事件。并且表格在父组件中呈现。
附上我的数据表。
解决方案
您可以使用@Input
and@Output
装饰器来实现所需的输出:
变化:
在父组件中:
HTML 代码:
<div>
<table *ngIf="isVisible === true">
<tr>
<th>
Id
</th>
<th>
name
</th>
<th>
username
</th>
<th>
email
</th>
</tr>
<tr *ngFor="let data of userInformation">
<td>{{data.id}}
</td>
<td>{{data.name}}
</td>
<td>{{data.username}}
</td>
<td>{{data.email}}
</td>
<td>
<a (click)="onSelect(data)">Go to
</a>
</td>
</tr>
</table>
<div *ngIf="isVisible === false">
<app-test-child [userInfo]="clickedUser" (notify)="backToList($event)"></app-test-child>
</div>
</div>
TS 代码:
局部变量:
userInformation: any;
isVisible : boolean = true;
clickedUser: any;
父组件中的两个函数:
onSelect(data)
{
this.isVisible = false;
this.clickedUser = data;
}
backToList(flag) {
this.isVisible = flag;
console.log(flag)
}
在子组件中:
HTML 代码:
<table>
<tr>
<th>
Id
</th>
<th>
name
</th>
<th>
username
</th>
<th>
email
</th>
</tr>
<tr>
<td>{{clickedUser.id}}
</td>
<td>{{clickedUser.name}}
</td>
<td>{{clickedUser.username}}
</td>
<td>{{clickedUser.email}}
</td>
<td>
<a (click)="backToList()">Back
</a>
</td>
</tr>
</table>
TS 代码:
import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';
@Input() userInfo: any;
@Output() notify: EventEmitter<any> = new EventEmitter<any>();
clickedUser: any;
constructor() { }
ngOnInit() {
this.clickedUser = this.userInfo;
}
backToList() {
var flag = true;
this.notify.emit(flag);
}
推荐阅读
- c++ - 与 PreMake 的静态链接
- api - 自动创建 Slack 帐户
- javascript - 如何配置 jest 以使用 ES6 模块?Javascript
- cordova - 科尔多瓦通过 https 服务应用程序的原因是什么?
- object - 使用 module.exports 和 REQUIRE JS 导出对象的属性
- asp-classic - 在经典 ASP 中删除 <% %> 和 %><% 时,它们之间没有任何内容会导致网页崩溃。这是为什么?
- c - 为什么否定二进制补码和有符号幅度中的整数会导致溢出?
- javascript - 完整日历“SlotDuration”插槽在底部显示空插槽
- javascript - Chrome 扩展 - 输入自动更改,不调度更改事件
- r - shapefile 中的错误(dataFolder,“file.shp”)):找不到函数“shapefile”