将数据从 JSON 对象绑定到 <mat-select> 时遇到问题
Facing issue with binding Data from JSON Object to <mat-select>
我无法从来自 API..
的 JSON 响应对象填充下拉列表
component.ts代码
for (let k in keys) {
this.form.controls['id'].setValue(data[k].name);
console.log(data[k].name);
}
});
component.html代码
<mat-form-field>
<mat-label>Select a User</mat-label>
<mat-select formControlName="id">
<mat-option *ngFor="let opt of options" [value]="opt.data" >
{{ opt.data.name}}
</mat-option>
</mat-select>
</mat-form-field>
console.log(数据)
0: {id: 1, name: "User1"}
1: {id: 2, name: "User2"}
2: {id: 3, name: "User3"}
3: {id: 4, name: "User4"}
...
console.log(数据[k].name); //这是我需要的下拉数据
User1
User2
User3
User4
...
console.log 数据显示每个对象的索引。不过,我的 JSON 对象非常简单。
看起来像:
[
{
"id": 1,
"name": "User1"
},
{
"id": 2,
"name": "User2"
},...
]
请让我知道我做错了什么。谢谢。
编辑
这是工作
Stackblitz Example
试试这个:
<mat-form-field>
<mat-label>Select a User</mat-label>
<mat-select formControlName="id">
<mat-option *ngFor="let item of list" [value]="item" >
{{ item.name }}
</mat-option>
</mat-select>
</mat-form-field>
根据这个修改你的TS文件:
list:any=[];
getUsers(): void {
this.usersService.getUsers()
.subscribe(users => {
this.users = users;
const data: User[] = this.users;
console.log('data',data)
console.log("object",Object.keys(data));
const keys: number[] = Object.keys(data) as any;
console.log("keys",keys);
console.log("users",this.users);
for (let k in keys) {
this.form.controls['id'].setValue(data[k].name);
console.log(data[k]);
this.list.push(data[k]);
}
});
}
如果我对问题的理解正确,您的 API 响应是一个列表,因此只需使用 for 循环将其绑定到 Mat-Option
。
HTML代码:
<mat-card>
<form [formGroup]="form" (submit)="add()">
<mat-form-field>
<mat-label>Select a User</mat-label>
<mat-select formControlName="id">
\/\/
<mat-option *ngFor="let key of users" [value]="key">
{{ key.name }}
</mat-option>
</mat-select>
</mat-form-field>
<br/>
<div fxLayout>
<div>
<button
mat-raised-button
color="accent" [disabled] = "form.invalid">Save
</button>
</div>
</div>
</form>
</mat-card>
TS代码:
getUsers(): void {
this.usersService.getUsers().subscribe(users => {
this.users = users;
console.log(this.users)
});
}
我无法从来自 API..
的 JSON 响应对象填充下拉列表component.ts代码
for (let k in keys) { this.form.controls['id'].setValue(data[k].name); console.log(data[k].name); } });
component.html代码
<mat-form-field> <mat-label>Select a User</mat-label> <mat-select formControlName="id"> <mat-option *ngFor="let opt of options" [value]="opt.data" > {{ opt.data.name}} </mat-option> </mat-select> </mat-form-field>
console.log(数据)
0: {id: 1, name: "User1"} 1: {id: 2, name: "User2"} 2: {id: 3, name: "User3"} 3: {id: 4, name: "User4"} ...
console.log(数据[k].name); //这是我需要的下拉数据
User1 User2 User3 User4 ...
console.log 数据显示每个对象的索引。不过,我的 JSON 对象非常简单。
看起来像:
[
{
"id": 1,
"name": "User1"
},
{
"id": 2,
"name": "User2"
},...
]
请让我知道我做错了什么。谢谢。
编辑
这是工作
Stackblitz Example
试试这个:
<mat-form-field>
<mat-label>Select a User</mat-label>
<mat-select formControlName="id">
<mat-option *ngFor="let item of list" [value]="item" >
{{ item.name }}
</mat-option>
</mat-select>
</mat-form-field>
根据这个修改你的TS文件:
list:any=[];
getUsers(): void {
this.usersService.getUsers()
.subscribe(users => {
this.users = users;
const data: User[] = this.users;
console.log('data',data)
console.log("object",Object.keys(data));
const keys: number[] = Object.keys(data) as any;
console.log("keys",keys);
console.log("users",this.users);
for (let k in keys) {
this.form.controls['id'].setValue(data[k].name);
console.log(data[k]);
this.list.push(data[k]);
}
});
}
如果我对问题的理解正确,您的 API 响应是一个列表,因此只需使用 for 循环将其绑定到 Mat-Option
。
HTML代码:
<mat-card>
<form [formGroup]="form" (submit)="add()">
<mat-form-field>
<mat-label>Select a User</mat-label>
<mat-select formControlName="id">
\/\/
<mat-option *ngFor="let key of users" [value]="key">
{{ key.name }}
</mat-option>
</mat-select>
</mat-form-field>
<br/>
<div fxLayout>
<div>
<button
mat-raised-button
color="accent" [disabled] = "form.invalid">Save
</button>
</div>
</div>
</form>
</mat-card>
TS代码:
getUsers(): void {
this.usersService.getUsers().subscribe(users => {
this.users = users;
console.log(this.users)
});
}