我确信这是一个简单的答案,但我似乎无法解决它。
我有一个下拉列表,其中包含John,Jack,Jill等名字。我在Builder,Joiner,Plasterer等专业人士中有第二个名单。
我想要做的是当我选择约翰时,我知道根据他的数据他是一个建造者,所以在我的第二个列表中我想要改变选择的值"选择"到" Builder"。
以下是我目前拥有的东西,任何关于如何做到这一点的建议都会很棒。
这是我第一次下拉的改变方法,但我没有得到预期的结果:
firstDropDownChanged(val: any) {
console.log(val);
if (val.profession == "Builder") {
this._values2.selected = "Builder";
}
else if (val.profession == "Plumber") {
this._values2.selected = "Plumber";
}
else if (val.profession == "Plasterer") {
this._values2.selected ="Plasterer";
}
else if (val.profession == "Joiner") {
this._values2.selected ="Joiner";
}
由于 安迪
答案 0 :(得分:1)
这是我能够根据Plunk中的代码开始工作的。
import {Component, NgModule } from '@angular/core'
import { FormsModule } from '@angular/forms';
import {BrowserModule} from '@angular/platform-browser'
@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.name }}</option>
</select>
<select [(ngModel)]="selectedProfession" >
<option>Select</option>
<option *ngFor='let v of _values2'>{{ v }}</option>
</select>
</div>
`,
})
export class App {
name:string;
selectedProfession:string;
private _values1 =
[
{name:"John", profession: "Builder"},
{name:"Jack", profession: "Builder"},
{name:"Jeff", profession: "Plumber"},
{name:"Jill", profession: "Plasterer"},
{name:"Joan", profession: "Joiner"},
];
private _values2 = ["Builder","Plumber"," Joiner", "Plasterer"];
constructor() {
this.name = 'Angular2'
}
firstDropDownChanged(val: any) {
console.log(val);
this.selectedProfession = this._values1.find(item => item.name === val).profession;
}
}
@NgModule({
imports: [ BrowserModule, FormsModule ],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}
我添加了FormsModule
,因此我可以将select值绑定到组件中的属性(selectedProfession
)。
然后我更改了firstDropDownChanged
功能,根据_values1
找到name
数组中的选择工作人员,并将下拉菜单的值设置为该人员的专业。
答案 1 :(得分:0)
如果您实际上不需要变量selectedProfession
,那么在第一个下拉列表中我们将拥有完整的对象,以便我们可以在第二个下拉列表中使用它。这样我们就不需要任何方法。所以第一个看起来像这样:
<select [(ngModel)]="tradesman">
<option>Select</option>
<option [ngValue]="v" *ngFor='let v of _tradesmen'>{{ v.name }}</option>
</select>
我们使用[ngValue]
绑定整个对象,然后第二个看起来像:
<select [(ngModel)]="tradesman.qualifications">
<option>Select</option>
<option *ngFor='let v of _qualifications'>{{ v.qualifications }}</option>
</select>
如果您希望捕获qualifications
中的任何可能的更改,tradesman
变量将进行更改,这种方式也很好。