Dizeler yerine bir dizi nesne tarafından desteklenen Angular2'de bir seçim oluşturmada sorun yaşıyorum. AngularJS'de ngOptions kullanarak nasıl yapılacağını biliyordum, ancak Angular2'de çalışmıyor gibi görünüyor (alpha 42 kullanıyorum). Aşağıdaki örnekte dört seçimim var, ancak bunlardan sadece ikisi çalışıyor.Angular2 içinde bir nesne dizisi üzerinde select/option/NgFor nasıl kullanılır
- 'Select String' basit bir dize tabanlı seçimdir ve iyi çalışır.
- '2 yollu bağlama yoluyla nesne seç', 2 yönlü bağlamayı kullanma girişimdi. Ne yazık ki, iki şekilde başarısız olur - sayfa yüklendiğinde, seçim yanlış değeri gösterir (çubuk yerine foo) ve listede bir seçenek belirlediğimde, '[Nesne Nesnesi]' değeri destek deposuna gönderilir doğru değer yerine.
- 'Nesneyi nesne ile seç', seçili değeri $ olayından alma girişimdi. İki şekilde de başarısız oluyor - ilk yük yanlış şekilde # 2 ile aynıdır ve listedeki bir seçeneği işaretlediğimde, [Nesne Nesnesi] değeri etkinlikten alınır, bu yüzden Doğru değeri al. Seçim temizlenir.
- 'Nesne ile nesne seç', çalışan bir nesne kullanan tek yaklaşımdır. Maalesef, # 1'den dize dizisini kullanarak ve değeri diziden nesneyle ve geri dönüştürerek çalışır.
İstenilen yol buysa 4 yapabilirim, ancak oldukça tıkanık görünüyor. Başka bir yaklaşım var mı? Ben alfada çok erken miyim? Aptalca bir şey mi yaptım?
import {Component, FORM_DIRECTIVES, NgFor} from 'angular2/angular2';
interface TestObject {
name:string;
value:number;
}
@Component({
selector: 'app',
template: `
<h4>Select String</h4>
<select [(ng-model)]="strValue">
<option *ng-for="#o of strArray" [value]="o">{{o}}</option>
</select>
<h4>Select Object via 2-way binding</h4>
<select [(ng-model)]="objValue1">
<option *ng-for="#o of objArray" [value]="o">{{o.name}}</option>
</select>
<h4>Select Object via event</h4>
<select [ng-model]="objValue2" (change)="updateObjValue2($event)">
<option *ng-for="#o of objArray" [value]="o">{{o.name}}</option>
</select>
<h4>Select Object via string</h4>
<select [ng-model]="objValue3.name" (change)="updateObjValue3($event)">
<option *ng-for="#o of strArray" [value]="o">{{o}}</option>
</select>
<div><button (click)="printValues()">Print Values</button></div>
`,
directives: [FORM_DIRECTIVES, NgFor]
})
export class AppComponent {
objArray:TestObject[] = [{name: 'foo', value: 1}, {name: 'bar', value: 1}];
objValue1:TestObject = this.objArray[1];
objValue2:TestObject = this.objArray[1];
objValue3:TestObject = this.objArray[1];
strArray:string[] = this.objArray.map((obj:TestObject) => obj.name);
strValue:string = this.strArray[1];
updateObjValue2(event:Event):void {
const value:string = (<HTMLSelectElement>event.srcElement).value;
this.objValue2 = this.objArray.find((obj:TestObject) => obj.name === value);
}
updateObjValue3(event:Event):void {
const value:string = (<HTMLSelectElement>event.srcElement).value;
this.objValue3 = this.objArray.find((obj:TestObject) => obj.name === value);
}
printValues():void {
console.log('strValue', this.strValue);
console.log('objValue1', this.objValue1);
console.log('objValue2', this.objValue2);
console.log('objValue3', this.objValue3);
}
}
Değerli zaman yolcuları buraya gelen 2016 ya da daha sonra! [Bağlantılı soru] (http://stackoverflow.com/q/35945001) hacky object-to-json-to- kullanmaz [daha iyi cevap] (http://stackoverflow.com/a/35945293) vardır nesne dönüşümü. –
Doğru. Yine de garip, bu soru diğeri 5 ay öncesine dayanan diğerinin bir kopyası olarak işaretlendi. – user3221325