私は最近、ngValue
のOPTION部分にvalue
プロパティの代わりがあることを知りました。ドキュメントには、これに関するドキュメントが実際にはありません(私が見つけることができるのは、すべて:https://angular.io/docs/ts/latest/api/forms/index/NgSelectOption-directive.html)。とにかく、ngModel
のオブジェクトを使用するときは、ngValue
を使用すると効果的です。それ以外は、例えばIDが更新されます。文字列の配列を持っている場合は、値で十分です。ここでの例は以下のとおりです。SELECT - > OPTION、値を使用してngValue
{{myModel | json}}
<select [(ngModel)]="myModel">
<option *ngFor="let i of items" [ngValue]="i">{{i.value}}</option>
</select>
<br /><br />
{{mySimpleModel}}
<select [(ngModel)]="mySimpleModel">
<option *ngFor="let i of simpleItems" [value]="i">{{i}}</option>
</select>
予想通り、これは動作しますが、両者の間に特徴的な違いがあります:ngValue
を使用している場合は、事前に定義された値がプリミティブ型のに対し、ドロップダウンで選択されていない、値は読み込み時に選択されます。例えば:
items: any[] = [{id: 1, value: 'item1'}, {id: 2, value: 'item2'}, {id: 3, value: 'item3'}];
myModel: any = {id: this.items[1].id , value: this.items[1].value};
simpleItems: string[] = ['item1', 'item2', 'item3'];
mySimpleModel: string = this.simpleItems[1];
は、ここで例を参照してください:https://plnkr.co/edit/JBrtmx7QkPZztBjaqYkS?p=preview だから、なぜ角はなく、オブジェクトのために、文字列のデフォルト値を設定していますか?最も洗練された回避策は何ですか?
グレート質問を使用する必要があります。 1つのポイント_please_ * never * 'items:any [] = [{id:1、value: 'item1'}、{id:2、value: 'item2'}、{id:3、value: 'item3 '}]; 'あなたはこれを行うことによってTypeScriptの主な利点を打ちのめしています。代わりに 'items = [{id:1、value: 'item1'}、{id:2、value: 'item2'}、{id:3、value: 'item3'}];型アノテーション、特に 'any'は、静的解析を無効にするイニシャライザが存在するときに有害であり、型チェックをシャットダウンします。 –
'simpleItems:string [] = ['item1'、 'item2'、 'item3'];は有害ではありませんが、言葉の無駄です。レバレッジ型推論。 –
私はあなたに同意します。これは、できるだけ早くサンプルを書くことを目的としたものです。私はまれに 'any'を使用します。必要に応じて、インターフェースを定義します。 – uglycode