将角度从 1.2 更新到 1.3 破坏了我的指令

Posted

技术标签:

【中文标题】将角度从 1.2 更新到 1.3 破坏了我的指令【英文标题】:Updating angular from 1.2 to 1.3 broke my directive 【发布时间】: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 中有很多重大更改,但它们(大部分)在指南中都有详细记录。 【参考方案1】:

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

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

【讨论】:

以上是关于将角度从 1.2 更新到 1.3 破坏了我的指令的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅关于欧拉角旋转顺序旋转矩阵四元数等知识的整理

我的OpenGL学习进阶之旅关于欧拉角旋转顺序旋转矩阵四元数等知识的整理

更新到 Swift 3 破坏了我的 swifty json 代码

VS 2019 更新到 16.8.4 破坏了我的每一个解决方案

最新的 AG 网格更新 (26.2.0) 破坏了我的脚本

如何将从服务接收到的 json 数据传递到 Angular 4 的角材料组件中的数组