【问题标题】:Updating angular from 1.2 to 1.3 broke my directive将角度从 1.2 更新到 1.3 破坏了我的指令
【发布时间】:2015-07-05 20:13:55
【问题描述】:

我在使用 angular-ui-bootstrap 日期选择器的输入字段中添加了以下指令:

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 字段(即使其中有数据,例如当我要编辑资源时),我的表单也不会提交。即使提交了一个好的日期,它基本上也将表格视为无效。该指令解决了这个问题,但是当我将 angular 升级到 1.3 时,该指令不再起作用。

我需要改变什么才能让这个指令再次起作用?

【问题讨论】:

  • 你也升级了 angular-ui 吗?
  • 究竟是什么不起作用?控制台中的任何错误?创建一些简单的 plunker 来重现您的问题。
  • 正如我所说,我的表单不会提交,因为它被视为无效(即使它是有效的,只是它没有被触及)。至于 angular-ui,最新版本是 angular 1.2,所以还没有 1.3 的版本。
  • @user2352164 我建议您检查 $scope.form 对象以找出究竟是什么使表单无效。
  • 您是否已经检查过migration guide? 1.3 中有很多重大更改,但它们(大部分)在指南中都有详细记录。

标签: javascript angularjs twitter-bootstrap datepicker


【解决方案1】:

Here 你可以找到一些关于 1.3 中影响 ngModel 的重大更改:

由于 HTML5 模式验证约束验证输入值, 我们还应该针对 viewValue 进行验证。虽然这在 核心到 Angular 1.2,在 1.3 中,我们不仅改变了验证, 但是input[date]input[number] 的处理方式 - 他们解析 它们的输入值分别为DateNumber,这不能 由正则表达式验证...

【讨论】:

    猜你喜欢
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    相关资源
    最近更新 更多