将角度从 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]
的处理方式 - 他们解析 它们的输入值分别为Date
和Number
,这不能 由正则表达式验证...
【讨论】:
以上是关于将角度从 1.2 更新到 1.3 破坏了我的指令的主要内容,如果未能解决你的问题,请参考以下文章
我的OpenGL学习进阶之旅关于欧拉角旋转顺序旋转矩阵四元数等知识的整理
我的OpenGL学习进阶之旅关于欧拉角旋转顺序旋转矩阵四元数等知识的整理
更新到 Swift 3 破坏了我的 swifty json 代码