2015-04-27 55 views
8

我有下面的指令,我就把在使用角度的UI自舉日期選擇器輸入字段:更新,從1.2到1.3角打破了我的指令

angular.module('directives.validators.date', []) 
.directive('validDate',[ '$filter', function ($filter) { 
    return { 
    restrict:'A', 
    require:'ngModel', 
    link: function (scope, el, attrs, ngModel) { 
     var pattern = /^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d$/; 
     ngModel.scope = scope; 
     ngModel.attrs = attrs; 
     el.on('blur',function() { 
     if(typeof ngModel.$viewValue === "object"){   
      var str = $filter('date')(ngModel.$viewValue, "dd.MM.yyyy"); 
      ngModel.$setViewValue(str); 
     } 

     if(ngModel.$viewValue){ 
      if(ngModel.$viewValue!=="" && !pattern.test(ngModel.$viewValue)){ 
       ngModel.$setValidity("date",false); 
      } 
     } 
     }); 

     scope.$watch(function() { 
      return ngModel.$modelValue; 
     }, 
     function() { 
     if(ngModel.$pristine){ //if the data has just been fetched, convert it to date format. 
      if (typeof ngModel.$viewValue === "number"){ 
      var date = new Date(ngModel.$viewValue); 
      //var str = $filter('date')(date, "dd.MM.yyyy"); 
      ngModel.$setViewValue(date); 
      ngModel.$setPristine(true); 
      var formName = $("form")[0].name; 
      ngModel.scope[formName].$setPristine(true); 
      ngModel.$setValidity("date",true); 
      } 
     } 
     if(ngModel.$viewValue){ //when the filed is changed, if it is corrected set that the date is valid 
      if(ngModel.$viewValue==="" || pattern.test(ngModel.$viewValue)){ 
      ngModel.$setValidity("date",true); 
      } 
     } 
     }); 
    } 
    }; 
}]); 

我曾與日期選擇器組件有問題,我的如果datepicker字段沒有被觸及(即使它有數據,例如當我編輯資源時),表單也不會提交。即使提交了一個好日期,它基本上將該表格計爲無效。這個指令解決了這個問題,但是當我將角度升級到1.3時,指令不再起作用。

我需要更改以使此指令再次運行?

+0

您是否還升級了angular-ui? – charlietfl

+2

究竟什麼不行?控制檯中的任何錯誤?創建一些簡單的重新生成你的問題。 –

+0

正如我所說我的表單不會提交,因爲它被視爲無效(即使它是有效的,只有它不被觸動)。 至於angular-ui,最新的版本是角1.2,所以沒有1.3的版本。 – user2352164

回答

0

Here你可以找到一些有關影響ngModel在1.3重大更改:

由於HTML5模式驗證約束驗證輸入值, 還要驗證對viewValue。雖然這在 核心工作到角1.2,在1.3中,我們不僅改變驗證, 但方式input[date]input[number]的處理方式 - 它們分別解析 它們的輸入值到DateNumber,不能 通過正則表達式驗證...