Angular 4 - 在下拉列表中查找选定的值

时间:2017-10-29 12:29:48

标签: angular drop-down-menu selectedvalue angular-reactive-forms

我正在使用Angular 4 Reactive Forms创建下拉列表

<select id="city" formControlName="city" (change)="onCitySelect($event)" >
    <option *ngFor="let city of cities" [ngValue]="city" >
        {{ city }} 
    </option>
</select> 

在下拉列表中选择值时,我想调用方法并显示所选值。

这是我执行此操作的代码

onCitySelect(event) {
    console.log(event.target.value);
}

我期待它打印城市名称,如下拉列表中所示。但是,它似乎也显示了索引号。例如,

2: London

而不只是London实际显示在下拉列表中。

如何在没有索引的情况下获取城市名称?

4 个答案:

答案 0 :(得分:4)

如果您有字符串或数字作为选项值,并且不想使用[value],请使用[ngValue]代替[(ngModel)]="..."

对于对象值,您总是应该使用[ngValue]

答案 1 :(得分:0)

由于您使用的是Angular 4 Reactive Forms,因此您可以执行以下操作:

假设您在组件的打字稿文件中有此声明:

export class myComponent{
    myForm: FormGroup;

    ngOnInit(){
        this.myForm = new FormGroup({
            city: new FormControl('', Validators.required)
        }
    }

    onCitySelect($event:any){
        console.log(this.myForm.controls["city"].value);
    }
}

因此,您可以使用:this.myForm.controls["city"].value来访问city的所选值。

答案 2 :(得分:0)

您可以订阅formControl以在更改值时触发函数,从而消除此

(change)="onCitySelect($event)" 

你可以这样做

this.myForm.get('city').valueChanges.subscribe(value=>{
     console.log(value);
})

其中'myForm'是你的formGroup,它有formControl'city' 因此,无论何时选择值,都会发生console.log(),因此无需添加onChange事件

也可以代替[ngValue]直接给出[value],你在这里定义的任何值都会记录下变化

答案 3 :(得分:0)

最简单的解决方案:

<select (change)="methodToCall($event.target.value)">
                            <option value="" selected>Please select account</option>
                            <option *ngFor='let details of someInformation?.thatIhave'
                                value={{details?.hNum}}>{{details?.hNum}}</option>
                        </select>