2017-05-20 39 views
3

問題描述

我試圖做一個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); 
} 

控制檯輸出

enter image description here

道歉

對不起,我對plunker不是很熟悉,不能很快找到一個我可以工作的Angular 2模板。

UPD。 option元素由AJT_82

  1. 使用[ngValue]而不是[value] - 接受的解決方案。
  2. 使用[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> 
+0

[value] =「payPeriod」此處payPeriod是一個對象。我不認爲你可以直接將它綁定到價值。如果你這樣做,它會默認使用toString()。 – wannadream

+0

@vannadream。你是對的,但我正在尋找一種綁定到payPeriod對象的方式。所以,對我來說,工作解決方案是AJT_82的一個 - '[ngValue] =「payPeriod」' –

+1

親愛的下投票人,請注意解釋我的問題出了什麼問題? –

回答

3

payPeriod是一個對象,所以如果你想整個對象綁定,使用[ngValue]代替[value]

<option *ngFor="let payPeriod of (payPeriodList | async)" [ngValue]="payPeriod">{{ payPeriod.endDate }}</option> 
+1

當我回家時,我會盡快完成。謝謝! –

+0

你的答案被接受。萬分感謝! –

+0

沒問題,很高興我能幫到你! :) – Alex