【发布时间】: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