2015-04-27 3 views
8

У меня есть следующие директивы, которые я ставлю на поля ввода, которые используют угловую-UI-самозагрузки DatePicker:Обновление углового от 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, что мой форма не будет отправлена, если поле datepicker не было затронуто (даже если в нем были данные, например, когда я отредактировал ресурс). Он в основном считал форму недействительной, даже если была отправлена ​​хорошая дата. Эта директива зафиксировала это, но когда я обновил свою угловую форму до 1.3, директива больше не работает.

Что мне нужно изменить, чтобы снова включить эту директиву?

+0

Вы также модернизировали угловое ui? – charlietfl

+2

Что именно не работает? Любые ошибки в консоли? Создайте простой плункер, который воспроизводит вашу проблему. –

+0

Как я уже сказал, моя форма не будет отправляться, потому что она считается недействительной (хотя она действительна, только ее не трогают). Что касается угловой ui, последняя версия предназначена для углового 1.2, поэтому до версии 1.3 пока нет. – user2352164

ответ

0

Here вы можете найти что-то о разрывном изменении, которое влияет на ngModel в 1.3:

Поскольку проверки шаблона ограничения HTML5 проверяет значение входного сигнала, мы должны проверить подлинность против viewValue. В то время как это работало в ядра до угловых 1.2, в 1.3, мы изменили не только проверку достоверности, но путь input[date] и input[number] обрабатываются - парсят своих входные значений в Date и Number соответственно, которые не могут быть проверены с помощью регулярных выражений ...

Смежные вопросы