[英]Angular 8 dropdown for complex object
In my project I am using .net Core 2.2 and Angular 8 for UI.在我的项目中,我使用 .net Core 2.2 和 Angular 8 作为 UI。 I want to implement dropdown for complex objects according their id.我想根据它们的 id 为复杂对象实现下拉列表。 When I go to dropdown I want to show for ex: ProjectName according to their Id.当我转到下拉列表时,我想根据他们的 ID 显示例如:ProjectName。
My VirtualMachine class looks like:我的 VirtualMachine 类看起来像:
public class VirtualMachine
{
public int Id { get; set; }
public string Name { get; set; }
public string IpAddress { get; set; }
public int DiskSize { get; set; }
public short CPU { get; set; }
public int Ram { get; set; }
public string ImageUrl { get; set; }
public VMRole Role { get; set; }
public VMStatus Status { get; set; }
public int HypervisorId { get; set; }
public Hypervisor Hypervisor { get; set; }
public int ProjectId { get; set; }
public Project Project { get; set; }
public int ManagementId { get; set; }
public Management Management { get; set; }
}
My Controller POST action looks like:我的控制器 POST 操作如下所示:
[HttpPost("create")]
public async Task<IActionResult> CreateVm(VirtualMachine vm)
{
if (await _repo.VmExists(vm.Name))
return BadRequest("VM name already exists");
vm.Hypervisor = _context.Hypervisors.SingleOrDefault(x => x.HypervisorId ==
vm.HypervisorId);
vm.Project = _context.Projects.SingleOrDefault(x => x.Id == vm.ProjectId);
vm.Management = _context.Managements.SingleOrDefault(x => x.Id == vm.ManagementId);
try
{
await _context.VirtualMachines.AddAsync(vm);
await _context.SaveChangesAsync();
}
catch (DbUpdateException)
{
return BadRequest();
}
return Ok();
}
Postman POST body:邮递员 POST 正文:
{
"name":"Abstergo",
"ipAddress":"192.168.0.1",
"diskSize":25,
"cpu":16,
"ram":100,
"imageUrl":"www.google.com",
"role":1,
"status":0,
"hypervisorId":1,
"projectId":11,
"managementId":8
}
Angular typecript class:角度打字稿类:
export class VirtualMachine {
name: string;
ipAddress: string;
diskSize: number;
cpu: number;
ram: number;
imageUrl: string;
role: string;
status: string;
projectId: number;
hypervisorId: number;
managementId: number;
projectName: Project;
managementName: Management;
hypervisorName: Hypervisor;
}
html code html代码
<div>
<select name="select" [(ngModel)]="model.hypervisorId">
<option style="display:none"></option>
<option *ngFor="let data of model.Hypervisor" [ngValue]="data.hyperisorId"> {{data.model.hypervisorName}} </option>
</select>
</div>
If you want to show ProjectName
according to their Id
, then you can sort this array before showing:如果你想根据他们的Id
显示ProjectName
,那么你可以在显示之前对这个数组进行排序:
let hypervisor = [ { projectName: "Abstergo 18", projectId: 18 }, { projectName: "Abstergo 17", projectId: 17 }, { projectName: "Abstergo 16", projectId: 16 }, ]; hypervisor.sort((a, b) => a.projectId - b.projectId); console.log(hypervisor);
So you can sort in ngOnInit()
method:所以你可以在ngOnInit()
方法中排序:
hypervisor = [
{ projectName: "Abstergo 18", projectId: 18 },
{ projectName: "Abstergo 17", projectId: 17 },
{ projectName: "Abstergo 16", projectId: 16 },
];
ngOnInit() {
this.hypervisor.sort((a, b) => a.projectId - b.projectId);
}
HTML: HTML:
<div>
<select name="select">
<option style="display:none">empty</option>
<option *ngFor="let data of hypervisor"
[ngValue]="data.projectId">
{{data.projectName}}
</option>
</select>
</div>
It can be seen in a stackblitz example .它可以在stackblitz 示例中看到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.