2017-08-02 56 views
0

我需要選擇'Month'作爲默認選項。我見過ngModel在ngFor列表上使用的例子,但它在我的情況下不起作用。任何人都知道解決方案?Angular 4默認選擇的選項沒有ngModel

模板:

<select class="form-control" (change)="onAmountChanged(tippanel)" [(ngModel)]="tip.Period"> 
           <option value="FourWeeks">Per 4 weken</option> 
           <option [selected]="period == 'Month'" value="Month">Per maand</option> 
           <option value="Quarter">Per kwartaal</option> 
           <option value="Year">Per jaar</option> 
          </select> 

組件:

onAmountChanged(tippanel: GeldzorgenTipGroup) { 

    let total = 0; 
    for (var tip of tippanel.Tips) { 
     if (tip.InputValue > 0) { 
      if (tip.Period) 
      { 
       total += this.getValuePerMonth(tip.Period, tip.InputValue); 
      } else { 
       total += tip.InputValue; 
      } 
     } 
     console.log(tip.Period); 
    } 

    tippanel.tipTotal = total; 

    this.onInputChange.emit(true); 
} 

getValuePerMonth(period: string, value: number): number { 
    switch (period) 
    { 
     case "FourWeeks": return (value * 13)/12; 
     case "Quarter": return value/3; 
     case "Year": return value/12; 
     default: 
     case "Month": return value; 
    } 
} 
+1

你的問題的標題有點違揹你的實際問題?你想不用'ngModel'來做它,還是隻是「不工作」。 – Alex

+0

@ AJT_82我想不用'ngModel',因爲'ngModel'已經用於別的東西了,但是如果有一種方法我可以同時使用'ngModel'那麼這也不錯 – Wahid

回答

0

如果使用ngModel,不要使用(change),使用(ngModelChange)代替並設置爲默認值,不要使用value="..."而是將默認值分配給tip.Period或您綁定的任何模型[(ngModel)]="..."(或者如果您使用ngModelChange pro bably更好[ngModel]="..."

class MyComponent { 
    selected:string = 'Month'; 

    onAmountChanged(tippanel) { 
    tip.Period = tippanel; 
    ... 
    } 
<select class="form-control" (ngModelChange)="onAmountChanged($event)" [ngModel]="selected"> 
    <option value="FourWeeks">Per 4 weken</option> 
    <option value="Month">Per maand</option> 
    <option value="Quarter">Per kwartaal</option> 
    <option value="Year">Per jaar</option> 
</select> 
+0

我試過了,默認選項有效但似乎所選選項的值不會被調用。我已經向OP添加了更多代碼,也許這可以說明原因。另外我不能設置tip.Period tippannel因爲tippanel是別的東西。 – Wahid

+0

'onAmountChanged(tippanel)'中的'tippanel'是什麼?我不知道你添加的代碼應該做什麼。 –

+0

'onAmountChanged(tippanel)'中的'tippanel'是一個在函數內部使用的模型。所以我們有一個模型'tippanel',它有'提示'模型和'提示'模型有Period。 'tip'內的輸入值被添加到'tippanel'的總值中。選定的時間段計算月份,4周等'tippanel'總數,我希望 – Wahid