使用角度4根据第一个下拉选择更改第二个下拉选项

时间:2018-09-22 09:41:35

标签: angular

component.html

<select data-placeholder="All Categories" class="category" value="category.category.categoryName">
  <option selected="selected" style="display:none">Select Category</option>
  <option class="select" *ngFor="let category of categories" value="category">
    {category.categoryName}}
  </option>
</select>
<select data-placeholder="All Cities" class="services location" value="category.categoryName">
  <option selected="selected" style="display:none">select type of services</option>
  <option *ngFor="let category of selected.categoryServicemodel; let i =
      index" value="category">{{category.serviceName}}
  </option>
</select>

component.ts

export class Component {
  categories: any[];
  services: any[];
  cities: any[];
  selected: any = {};

  constructor() {
    getAllCategories();
    {
      this.postService.getAllCategories()
        .subscribe(data => {
          this.categories = data.json();
          console.log(this.categories);
        });
    }

    getAllService();
    {
      this.postService.getAllServices()
        .subscribe(res => {
          this.services = res.json();
        });
    }
  }
}

回复

[
  {
    "categoryId": 1,
    "categoryName": "Painting",
    "categoryDesc": "Painting of all types",
    "categoryServicemodel": [
      {
        "serviceId": 1,
        "serviceName": "Test12",
        "serviceDesc": "test12",
        "isActive": 1
      },
      {
        "serviceId": 3,
        "serviceName": "TESTINGEXAMPLE ",
        "serviceDesc": "TESTINGEXAMPLE Details 
        Information
        ",
        "isActive": 1
      },
      {
        "serviceId": 12,
        "serviceName": "New Painters",
        "serviceDesc": "office paintings ",
        "isActive": 2
      },
      {
        "serviceId": 11,
        "serviceName": "ABC Painters",
        "serviceDesc": "painting of all types",
        "isActive": 1
      }
    ],
    "active": 1
  },
  {
    "categoryId": 2,
    "categoryName": "string",
    "categoryDesc": "string",
    "categoryServicemodel": [
      {
        "serviceId": 2,
        "serviceName": "Test15",
        "serviceDesc": "test15",
        "isActive": 1
      }
    ],
    "active": 0
  },
  {
    "categoryId": 4,
    "categoryName": "carpenter",
    "categoryDesc": "Carpenter",
    "categoryServicemodel": [
      {
        "serviceId": 5,
        "serviceName": "Test Carpenter ",
        "serviceDesc": "Test carpenter Description",
        "isActive": 1
      }
    ],
    "active": 0
  }
]
  

我的问题是,当我为ex选择第一个类别名称时。绘画(在我的答复中)应在第二个下拉菜单中更改该类别下的所有服务名称   再一次,如果我选择第二类别,则该类别下的所有服务名称应在第二下拉列表中可用

1 个答案:

答案 0 :(得分:1)

我对您的代码做了一些小的更改。

  • 在您的html中,我将“值”替换为“ [值]”。在此代码中,选项值始终是“类别”字符串。如果使用方括号,则将引用变量的内容
  • 我创建了一个buildService方法来填充服务数组
  • 最后,当我选择第一个组件时,我会调用buildService

示例代码:https://stackblitz.com/edit/service-category

component.html

<select data-placeholder="All Categories" class="category" value="category.categoryName" [(ngModel)]="selected" (change)="buildServices($event)">
  <option selected="selected" style="display:none">Select Category</option>
  <option class="select" *ngFor="let category of categories" [value]="category.categoryId">
    {{category.categoryName}}
  </option>
</select>
<select data-placeholder="All Cities" class="services location" value="category.categoryName">
  <option selected="selected" style="display:none">select type of services</option>
  <option *ngFor="let service of services; let i =
      index" value="service.serviceId">{{service.serviceName}}
  </option>
</select>

component.ts

  public buildServices() {
    this.services = [];
    this.categories.forEach((category) => {
      if (category.categoryId == this.selected) {
        this.services = category.categoryServicemodel;
      }  
    }); 
  }