繁体   English   中英

如何在 Angular 2 应用程序中使用打字稿显示基于其他下拉值的下拉值

[英]How to display the dropdown values based on other dropdown value using typescript in Angular 2 application

我正在开发 angular 2 应用程序,在我当前的项目中,我想要显示基于年份、品牌、型号的下拉值的功能。 例如,如果我选择本田,则在模型下拉列表中仅显示本田车型。

默认情况下,我将绑定年份、品牌和型号的完整数据。

这是我的看法。

在此处输入图片说明

车辆组件.html

<div class="row form-group">
    <div class="col-md-3">
        <label  class="control-label">Year*</label><br />
        <select  friendly-name="Year" id="year" name="year" class="col-md-6 form-control"  ng-required="true" onchange='OnChange()' >
            <option>Select</option>
            
            <option *ngFor='let type of lookupdetailsvehicleyearinfo'>{{type.LookupValue}}</option>
           
        </select>
    </div>
    <div class="col-md-3">
        <label  class="control-label">Make*</label><br />
        <select friendly-name="Make" class="col-md-6 form-control" ng-required="true" >
            <option>Select</option>
            <option *ngFor='let type of lookupdetailsvehiclemakeinfo'>{{type.LookupValue}}</option>
            </select>
    </div>
    <div class="col-md-3">
        <label  class="control-label">Model*</label>
        <select  friendly-name="Model" class="col-md-6 form-control" ng-required="true" >
            <option>Select</option>
            <option *ngFor='let type of lookupdetailsvehiclemodelinfo'>{{type.LookupValue}}</option>
           </select>
    </div>                                      
</div>

我将从我自己的 API 中获取上述数据。

您能否告诉我如何在 angular 2 应用程序中为上述功能编写打字稿代码。

您唯一要做的就是跟踪选择输入的change事件并更改另一个选择输入的源。 Angular2 将完成剩下的工作。

使用选定的value

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2>Hello {{name}}</h2>

      <select (change)="firstDropDownChanged($event.target.value)" >
        <option>Select</option>
        <option *ngFor='let v of _values1'>{{ v }}</option>
      </select>

      <select >
        <option>Select</option>
        <option *ngFor='let v of _values2'>{{ v }}</option>
      </select>
    </div>
  `,
})
export class App {
  name:string;

  private _values1 = ["1", "2", "3"];
  private _values2 = [];

  constructor() {
    this.name = 'Angular2'
  }

  firstDropDownChanged(val: any) {
    console.log(val);

    if (val == "1") {
      this._values2 = ["1.1", "1.2", "1.3"];
    }
    else if (val == "2") {
      this._values2 = ["2.1", "2.2", "2.3"];
    }
    else if (val == "3") {
      this._values2 = ["3.1", "3.2", "3.3"];
    }
    else {
      this._values2 = [];
    }
  }
}

现场演示: https : //plnkr.co/edit/GDXsPt4aiS7vus6oPvuU?p=preview

更新

或者您可以使用selectedIndex :(请注意-1导致您的第一个“选择”项。

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2>Hello {{name}}</h2>

      <select (change)="firstDropDownChanged($event.target.selectedIndex - 1)" >
        <option>Select</option>
        <option *ngFor="let v of _values1">{{ v.val }}</option>
      </select>

      <select >
        <option>Select</option>
        <option *ngFor='let v of _values2'>{{ v }}</option>
      </select>
    </div>
  `,
})
export class App {
  name:string;

  private _values1 = [
    { id: 1, val: "huhu" },
    { id: 2, val: "val2" },
    { id: 3, val: "yep" },
    { id: 4, val: "cool" }
  ];
  private _values2 = [];

  constructor() {
    this.name = 'Angular2'
  }

  firstDropDownChanged(val: any) {
    const obj = this._values1[val];
    console.log(val, obj);

    if (!obj) return;

    if (obj.id == 1) {
      this._values2 = ["1.1", "1.2", "1.3"];
    }
    else if (obj.id == 2) {
      this._values2 = ["2.1", "2.2", "2.3"];
    }
    else if (obj.id == 3) {
      this._values2 = ["3.1", "3.2", "3.3"];
    }
    else {
      this._values2 = [];
    }
  }
}

现场演示: https : //plnkr.co/edit/wugNC6S27FB48EtRN906?p=preview

Ng5-Dynamic Selectoption - 用于选择国家、州和地区的下拉菜单

模板.html

<div>
    <h2>Hello country/ state/ cities </h2>

    <select (change)="countryChange($event)" >
      <option>Select</option>
      <option *ngFor="let c of countries" [ngValue]="c.country">{{ c.country }}</option>
    </select>

    <select (change)="statesChange($event)">
      <option>Select</option>
      <option *ngFor='let state of states' [ngValue]="state.name">{{ state.name }}</option>
    </select>

    <select >
      <option>Select</option>
      <option *ngFor='let city of cities' [ngValue]="city">{{ city }}</option>
    </select>
</div>

组件.ts

var countries= [{
            "country": "Afghanistan",
      "states": [
                  { "name":"Nurestan", "cities":["c1", "c2", "c3"]  },
                  { "name":"Oruzgan", "cities":["orc1", "oruc2", "oruc3"] },
                  { "name":"Panjshir", "cities":["3c1", "3c2", "3c3"]  }
                ]
    },
    {
            "country": "Albania",
            "states": [ 
                  { "name": "Korce" , "cities":["c1", "c2", "c3"] },
                  { "name": "Kukes",  "cities":["orc1", "oruc2", "oruc3"] },
                  { "name": "Lezhe","cities":["orc1", "oruc2", "oruc3"]},
                  { "name": "Shkoder", "cities":["orc1", "oruc2", "oruc3"]},
                  { "name": "Tirane","cities":["orc1", "oruc2", "oruc3"]}
                ]
        },      
        {
            "country": "Antarctica",
            "states": []
        }           
    ]

    states= []; cities = [];
    countryChange(e){
      console.log(e.target.value)
      this.countries.filter(element => {
        if(element.country == e.target.value){
          console.log(element.states[0],"first state")
          this.states = element.states;
        }
      });
      this.cities = []
    }
    statesChange(evt){
      console.log(evt.target.value,this.states)
      this.states.filter( element =>{
        if(element.name == evt.target.value){
          this.cities = element.cities;
        }
      })
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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