home wiki.fukuchiharuki.me
Menu

* キーワード [#lbf4f080]
- Angular2
- select multiple
- ngModel

* 現象 [#z972b51b]

select multipleにngModelで双方向バインディングしようとすると、

 <select multiple [(ngModel)]="myModelProperty">
  ...
 </select>

エラー。

 error_handler.js:47 EXCEPTION: Uncaught (in promise): TypeError: values.map is not a function

* 原因 [#t44267fa]

分からない。けど誰かがこう言っていた。

> As others have said, it's not supported by default in Angular2 yet.

* 対策 [#l80ff3e7]

select multipleで変更した値を自前で取得する。

 <select multiple (change)="onChangeValuesSelect($event)">
  ...
 </select>

 private onChangeValuesSelect(event: any) {
   let values = Array
   .from(event.target.options)
   .filter((option: any) => option.selected)
   .map((option: any) => option.value);
 }

* 備考 [#z7b31351]

ただし、上記の方法は順方向のバインディングになっていない。双方向にする具体的なコードは参考記事を見てほしい。

$eventの内容はコンソール出力すればいろいろ見れる。

 console.debug(event);

* 参考 [#fbe3891a]
- [[Angular2: how bind to select multiple - Stack Overflow>http://stackoverflow.com/questions/35167463/angular2-how-bind-to-select-multiple]]