Для динамического создания раскрывающегося списка на основе приведенных выше данных создайте модель.
User-model.ts
export class UserModel {
user_id: number;
name: string; }
В компоненте это будет выглядеть примерно так
import { UserModel } from '../app/model/user-model';
curr_name: string = '';
curr_user_id: number = null;
users: UserModel[] =
[
{
"user_id": 1,
"name": "John"
},
{
"user_id": 2,
"name": "Doe"
}];
getName(id: any): void {
if (id !== 'SELECT') { // SELECT is used for default here
this.curr_name = this.users.find(x => x.user_id == id).name;
}
}
getUserId(name: any): void {
if (name !== 'SELECT') {
this.curr_user_id = this.users.find(x => x.name == name).user_id;
}
}
И, наконец, в зависимости от вашего дизайна код HTML будет выглядеть в основном как
<select (change)="getName($event.target.value)">
<option>SELECT</option>
<option *ngFor="let user of users" [ngValue]="user.user_id"
[selected]="user.user_id === curr_user_id">
{{user.user_id}}
</option>
</select>
<select (change)="getUserId($event.target.value)">
<option> SELECT</option>
<option *ngFor="let user of users" [ngValue]="user.name"
[selected]="user.name === curr_name">
{{user.name}}
</option>
</select>
Хотя вы обновляете оба раскрывающихся списка независимо от того, почему бы не создать только одинв раскрывающемся списке укажите user-id
и name
в формате списка, чтобы вам не приходилось обновлять друг друга.