#json #angular #angular-material #associative-array #angular7
#json #angular #angular-материал #ассоциативный массив #angular7
Вопрос:
У меня возникли проблемы с заполнением выпадающего списка из объекта ответа JSON, поступающего из API..
-
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(data [k].name); // Это данные, которые мне нужны в раскрывающемся списке
User1 User2 User3 User4 ...
Консоль.данные журнала показывают индекс для каждого объекта. Мой объект JSON довольно прост.
Это выглядит как:
[
{
"id": 1,
"name": "User1"
},
{
"id": 2,
"name": "User2"
},...
]
Пожалуйста, дайте мне знать, что я делаю не так. Спасибо.
Редактировать
Вот рабочий пример Stackblitz
Комментарии:
1. какие параметры здесь в <mat-option *ngFor=»разрешить выбор параметров» [value]=»opt.data» >?
2. @AddWebSolutionPvtLtd Я только что отредактировал опечатку. Спасибо за редактирование. Это данные, а не параметры.
3. Решена ли она сейчас? или все еще сталкивается с проблемой?
4. @Rachit Проверьте опубликованный ответ
Ответ №1:
Если я правильно понимаю вопрос, ваш ответ 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)
});
}
Ответ №2:
Попробуйте это:
<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]);
}
});
}
Комментарии:
1. Это не работает. Я пробовал параметры и данные как с другими изменениями.
2. Пожалуйста, поделитесь своим полным кодом файла ts, чтобы я мог вам помочь
3. Вот как я сохранил свой ответ JSON в массив … const data: User[] = this.users; console.log(Object.keys(данные)); const keys: number[] = Object.keys (данные) как любой; console.log(ключи);
4. Я отредактировал свой код в соответствии с информацией, предоставленной вами, пожалуйста, попробуйте это и дайте мне знать, работает это или нет?
5. Еще раз спасибо. Я попробовал еще раз. Все еще не работает. Позвольте мне напомнить вам, что я могу извлекать данные, которые мне нужно отобразить на консоли. регистрируйте, как указано выше. Все, что мне нужно, это привязать его к выпадающему списку.