Angular 将数据行动态写入 table
Angular write data lines dynamically to a table
在我的项目中,我从 JSONPlaceholder - Users
获取数据
我是 Angular 的新手,所以如果您发现我获取数据的方式有问题,请警告我。
dataFromServer;
constructor(private http: HttpClient){
this.dummyPromise.then(
response => {
console.log("response from dummy promise:", response);
this.dataFromServer = response;
},
error => {
console.log("Error happened with dummy promise:", error)
}
)
}
dummyPromise = new Promise((resolve, reject) => {
this.http.get('https://jsonplaceholder.typicode.com/users').subscribe(data => {
console.log(data);
this.dataFromServer = data;
});
//resolve(returnData);
});
问题是,在我的 HTML 文件中,我将数据写入 table,如下所示:
<tr *ngIf="dataFromServer">
<td>{{dataFromServer[0].id}}</td>
<td>{{dataFromServer[0].name}}</td>
<td>{{dataFromServer[0].username}}</td>
<td>{{dataFromServer[0].email}}</td>
</tr>
<tr *ngIf="dataFromServer">
<td>{{dataFromServer[1].id}}</td>
<td>{{dataFromServer[1].name}}</td>
<td>{{dataFromServer[1].username}}</td>
<td>{{dataFromServer[1].email}}</td>
</tr>
...对于所有 10 个人。我想动态地做,我得到的人的数据有多少行。
我认为您应该尝试使用 *ngFor 而不是 *ngIf。我举个例子。
<tr *ngFor="let data of dataFromServer">
<td>{{data.id}}</td>
<td>{{data.name}}</td>
<td>{{data.username}}</td>
<td>{{data.email}}</td>
</tr>
因此,它会为您的 dataFromServer 中的每个对象重复
使用ngFor
迭代数据数组:
<table *ngIf="dataFromServer">
<tr *ngFor="let item of dataFromServer">
<td>{{item.id}}</td>
...
</tr>
</table>
table
上的 ngIf
条件将防止控制台 errors/rendering 问题,如果 dataFromServer
在从您的 API[ 接收之前是 null/undefined =15=]
您可以使用 *ngFor
来完成。它实际上是 html 中的 for。作为示例,我们假设我们有一个这样的组件:
private users: User[] = [];
ngOnInit(){
this.service.getUser()
.subscribe(userList => {
this.users = userList;
});
}
用户class:
export class User {
public id: number;
public name: string;
}
您可以像这样在 html 中使用 *ngFor :
<span *ngFor="let user of users">
UserID: {{user.id}} - User Name: {{user.name}}
</span>
所以基本上,与您的代码相关,只需将您从 http 调用 获得的 json 数据放入用户对象,然后修改 html 像这样:
<tr *ngFor="let user of users">
<td>{{user.id}}</td>
<td>{{user.name}}</td>
.....
</tr>
您可以将 html 代码替换为下面的代码
<tr *ngFor="let row of dataFromServer">
<td>{{row.id}}</td>
<td>{{row.name}}</td>
<td>{{row.username}}</td>
<td>{{row.email}}</td>
</tr>
在我的项目中,我从 JSONPlaceholder - Users
获取数据
我是 Angular 的新手,所以如果您发现我获取数据的方式有问题,请警告我。
dataFromServer;
constructor(private http: HttpClient){
this.dummyPromise.then(
response => {
console.log("response from dummy promise:", response);
this.dataFromServer = response;
},
error => {
console.log("Error happened with dummy promise:", error)
}
)
}
dummyPromise = new Promise((resolve, reject) => {
this.http.get('https://jsonplaceholder.typicode.com/users').subscribe(data => {
console.log(data);
this.dataFromServer = data;
});
//resolve(returnData);
});
问题是,在我的 HTML 文件中,我将数据写入 table,如下所示:
<tr *ngIf="dataFromServer">
<td>{{dataFromServer[0].id}}</td>
<td>{{dataFromServer[0].name}}</td>
<td>{{dataFromServer[0].username}}</td>
<td>{{dataFromServer[0].email}}</td>
</tr>
<tr *ngIf="dataFromServer">
<td>{{dataFromServer[1].id}}</td>
<td>{{dataFromServer[1].name}}</td>
<td>{{dataFromServer[1].username}}</td>
<td>{{dataFromServer[1].email}}</td>
</tr>
...对于所有 10 个人。我想动态地做,我得到的人的数据有多少行。
我认为您应该尝试使用 *ngFor 而不是 *ngIf。我举个例子。
<tr *ngFor="let data of dataFromServer">
<td>{{data.id}}</td>
<td>{{data.name}}</td>
<td>{{data.username}}</td>
<td>{{data.email}}</td>
</tr>
因此,它会为您的 dataFromServer 中的每个对象重复
使用ngFor
迭代数据数组:
<table *ngIf="dataFromServer">
<tr *ngFor="let item of dataFromServer">
<td>{{item.id}}</td>
...
</tr>
</table>
table
上的 ngIf
条件将防止控制台 errors/rendering 问题,如果 dataFromServer
在从您的 API[ 接收之前是 null/undefined =15=]
您可以使用 *ngFor
来完成。它实际上是 html 中的 for。作为示例,我们假设我们有一个这样的组件:
private users: User[] = [];
ngOnInit(){
this.service.getUser()
.subscribe(userList => {
this.users = userList;
});
}
用户class:
export class User {
public id: number;
public name: string;
}
您可以像这样在 html 中使用 *ngFor :
<span *ngFor="let user of users">
UserID: {{user.id}} - User Name: {{user.name}}
</span>
所以基本上,与您的代码相关,只需将您从 http 调用 获得的 json 数据放入用户对象,然后修改 html 像这样:
<tr *ngFor="let user of users">
<td>{{user.id}}</td>
<td>{{user.name}}</td>
.....
</tr>
您可以将 html 代码替换为下面的代码
<tr *ngFor="let row of dataFromServer">
<td>{{row.id}}</td>
<td>{{row.name}}</td>
<td>{{row.username}}</td>
<td>{{row.email}}</td>
</tr>