[英]How to display the dropdown values based on other dropdown selected value using typescript in Angular 4
[英]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.