加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS自定义验证在程序更改模型时不会触发

发布时间:2020-12-17 07:48:16 所属栏目:安全 来源:网络整理
导读:我创建了一个自定义验证器,要求日期在过去.当将该日期手动输入到该字段时,验证似乎很有用.但是,如果我以编程方式更改日期(直接更改模型,而不是在字段中输入),验证不会触发. 我相信我正在按照文档中的指示进行自定义验证指令. Here is a jsFiddle说明问题.在
我创建了一个自定义验证器,要求日期在过去.当将该日期手动输入到该字段时,验证似乎很有用.但是,如果我以编程方式更改日期(直接更改模型,而不是在字段中输入),验证不会触发.

我相信我正在按照文档中的指示进行自定义验证指令. Here is a jsFiddle说明问题.在小提琴中,如果您单击“更改日期程序”按钮,您可以看到验证错误不会显示(但是如果您手动更改它).这里是指令代码(也在小提琴中):

myApp.directive('pastDate',function() {
    return {
        restrict: 'A',require: '?ngModel',link: function (scope,element,attrs,ctrl) {
            ctrl.$parsers.unshift(function (viewValue) {
                var today = new Date();
                today = new Date(today.getFullYear(),today.getMonth(),today.getDate());

                if (new Date(viewValue) < today) {
                    ctrl.$setValidity('pastDate',true);
                    return viewValue;
                }
                ctrl.$setValidity('pastDate',false);
                return undefined;
            });
        }
    };
});
模型绑定有两种方式,$解析器控制视图到模型方向的流水线,$formatters控制模型到视图方向的流水线.当您更新控制器中的模型时,更改将通过$formatters管道.

我已经将你的代码更新为:this,所以它处理两种方式.

myApp.directive('pastDate',ctrl) {
            function validate (value) {
                var today = new Date();
                today = new Date(today.getFullYear(),today.getDate());

                if (new Date(value) < today) {
                    ctrl.$setValidity('pastDate',true);
                    return value;
                }
                ctrl.$setValidity('pastDate',false);
                return value;
            }
            ctrl.$parsers.unshift(validate);
            ctrl.$formatters.unshift(validate)
        }
    };
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读