1. ホーム
  2. angular

[解決済み] Angular 2の "select "で新しい選択範囲を取得するにはどうすればよいですか?

2022-03-21 04:44:46

質問

Angular 2 (TypeScript)を使用しています。

新しい選択範囲を使って何かをしたいのですが、その際に表示されるのは onChange() は常に前回の選択範囲です。どうすれば新しい選択範囲を取得できるのでしょうか?

<select [(ngModel)]="selectedDevice" (change)="onChange($event)">
   <option *ngFor="#i of devices">{{i}}</option>
</select>

onChange($event) {
    console.log(this.selectedDevice);
    // I want to do something here with the new selectedDevice, but what I
    // get here is always the last selection, not the one I just selected.
}

解決方法は?

双方向のデータバインディングが必要ない場合。

<select (change)="onChange($event.target.value)">
    <option *ngFor="let i of devices">{{i}}</option>
</select>

onChange(deviceValue) {
    console.log(deviceValue);
}

双方向のデータバインディングの場合、イベントとプロパティのバインディングを分離する。

<select [ngModel]="selectedDevice" (ngModelChange)="onChange($event)" name="sel2">
    <option [value]="i" *ngFor="let i of devices">{{i}}</option>
</select>

export class AppComponent {
  devices = 'one two three'.split(' ');
  selectedDevice = 'two';
  onChange(newValue) {
    console.log(newValue);
    this.selectedDevice = newValue;
    // ... do other stuff here ...
}


もし devices がオブジェクトの配列の場合 ngValue の代わりに value :

<select [ngModel]="selectedDeviceObj" (ngModelChange)="onChangeObj($event)" name="sel3">
  <option [ngValue]="i" *ngFor="let i of deviceObjects">{{i.name}}</option>
</select>
{{selectedDeviceObj | json}}

export class AppComponent {
  deviceObjects = [{name: 1}, {name: 2}, {name: 3}];
  selectedDeviceObj = this.deviceObjects[1];
  onChangeObj(newObj) {
    console.log(newObj);
    this.selectedDeviceObj = newObj;
    // ... do other stuff here ...
  }
}


プランカー - は使用しません。 <form>
プランカー - 用途 <form> で、新しいフォーム API を使用します。