2017-01-23 92 views
0

因爲我從JavaScript轉換爲TypeScript(版本2.1.5),下面的代碼過濾日期選擇不再有效。我想我知道爲什麼,但我現在還沒有找到一個好的解決方案。Typescript + Angular:變量上下文

這裏是我的兩個日期選取器:從和到:

       <div class="form-group"> 
           <label class="label label-letter-spacing">From </label> 
           <div class='input-group date' id='datepickerFrom'> 
            <md-datepicker ng-model="vm.dateFrom"></md-datepicker> 
           </div> 
          </div> 
          <div class="form-group"> 
           <label class="label label-letter-spacing">To </label> 
           <div class='input-group date' id='datepickerTo'> 
            <md-datepicker ng-model="vm.dateTo" md-date-filter="vm.onlyGreaterThanFromDate" ></md-datepicker> 
           </div> 
          </div> 

在Controller.ts我:

 dateTo: Date; 
     dateFrom: Date; 

     onlyGreaterThanFromDate(date) { 
      if (this.dateFrom != undefined) 
       return (date.getTime() > this.dateFrom.getTime()); 
     }; 

而在瀏覽器(Chrome)調試,我注意到,當這個方法執行後,上下文已經改變了,這個代表沒有更多我的控制器,但是CalendarCtrl等等,this.dateFrom是未定義的。

我嘗試了一些調整設置dateFrom屬性在靜態或私人,但也不工作。

我仍在尋找,我期待着閱讀你對此的評論/想法。 :)謝謝

+0

您能顯示整個ts代碼文件嗎?這聽起來像是你所描述的關於這個變量變化上下文的範圍問題。 – mindparse

+2

在Typescript中,你可以使用箭頭函數來保存上下文。例如:'onlyGreaterThanFromDate =(date)=> {if(this.dateFrom!= undefined) return(date.getTime()> this.dateFrom.getTime()); };' –

回答

1

非常感謝你鴻草爲您的答案。這是正確的代碼,我在打字稿:)

學到了有用的功能,所以我重新發布的解決方案:

在打字稿,您可以使用箭頭功能以保護環境。 類似於:onlyGreaterThanFromDate =(date)=> {if (this.dateFrom!= undefined)return(date.getTime()> this.dateFrom.getTime()); };