問題描述
我試圖做一個select
/option
基於下拉工作使用asyncPipe
和[ngModel]
/(ngModelChange)
可觀察到的領域。我的代碼有些問題,因爲在運行時控制檯輸出[object Object]
(請參閱下圖)。異步管道使用選擇/選項和ngModel/ngModelChange
令我困惑的是,如果我使用[value]="payPeriod.id"
,它工作正常,數字id
成功收到setSelectedPayPeriod(...)
方。
component.html
<select [ngModel]="selectedPayPeriod | json" (ngModelChange)="setSelectedPayPeriod($event)">
<option *ngFor="let payPeriod of (payPeriodList | async)" [value]="payPeriod">{{ payPeriod.endDate }}</option>
</select>
component.ts
get payPeriodList(): Observable<PayPeriod[]> {
return this._contextService.payPeriodList;
}
get selectedPayPeriod(): Observable<PayPeriod> {
return this._contextService.selectedPayPeriod;
}
setSelectedPayPeriod(newValue: PayPeriod): void {
console.warn(newValue);
this._contextService.setSelectedPayPeriod(newValue);
}
控制檯輸出
道歉
對不起,我對plunker不是很熟悉,不能很快找到一個我可以工作的Angular 2模板。
UPD。 option
元素由AJT_82
- 使用
[ngValue]
而不是[value]
- 接受的解決方案。 - 使用
[ngModel]="selectedPayPeriod | async"
而不是[ngModel]="selectedPayPeriod | json"
對select
元素。
<select [ngModel]="selectedPayPeriod | async" (ngModelChange)="setSelectedPayPeriod($event)">
<option *ngFor="let payPeriod of (payPeriodList | async)" [ngValue]="payPeriod">{{ payPeriod.endDate }}</option>
</select>
[value] =「payPeriod」此處payPeriod是一個對象。我不認爲你可以直接將它綁定到價值。如果你這樣做,它會默認使用toString()。 – wannadream
@vannadream。你是對的,但我正在尋找一種綁定到payPeriod對象的方式。所以,對我來說,工作解決方案是AJT_82的一個 - '[ngValue] =「payPeriod」' –
親愛的下投票人,請注意解釋我的問題出了什麼問題? –