简体   繁体   English

复杂对象的 Angular 8 下拉菜单

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM