gpt4 book ai didi

angularjs - 如何在初始化后触发附加事件的 ngModel 验证

转载 作者:行者123 更新时间:2023-12-01 09:24:31 25 4
gpt4 key购买 nike

尽管使用谷歌等,我没有找到解决我的问题的方法。感谢您的浏览。

我想实现以下输入验证行为(使用 angular ngModelController):

输入验证应仅在用户首次离开该字段后触发。但是,如果存在验证错误,则验证不仅应在模糊时触发,还应在更改时触发,以便在纠正错误时立即通知用户。

我创建了一个只有一个(后)链接函数的指令,它在同一个元素上“需要”sngModel。

angular.module('foo').directive('errFB', function(){
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, iElem, attrs, ngModel){
// which trigger source / event should I listen on?
// iElem.on, ngModel.$viewChange, scope.$on, scope.$parent.$on?
// iElem.on, seemed the best fit.
xyz.on(..., function(){

if (ngModel.$touched && ngModel.$invalid){
// here validation is not triggered.
// probably, due to having ngModelOptions
// set to only validate on blur?
// could this be changed programmatically?
ngModel.$validate();
}
}
}
}
});

关于触发验证的第二条评论:
我考虑反过来做:即首先通过 ngModelOptions 对“默认”(更改)和“模糊”启用验证,然后停止运行验证,以防它是由“默认”触发器引起的,当 ngModel.$touched === 假的。但是禁用验证似乎非常困难,并且与 angular 的流程背道而驰。

任何类型的建议表示赞赏。
非常感谢!

最佳答案

所以,经过长时间的努力,我找到了一种方法。
其实很简单:

link: function(scope, iElem, attrs, ngModel){
iElem.on("change", function(evt){
if (ngModel.$touched && ngModel.$invalid){
ngModel.$options.updateOnDefault = true;
ngModel.$validate();
}
});

如您所见,可以在创建/启动时间后设置 model.$options(定义执行 modelController 的 $validators 管道的事件)。
对 validate 的调用将使验证排队(将在下一个验证事件上执行)。

关于angularjs - 如何在初始化后触发附加事件的 ngModel 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27509505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com