我设法将AngularJS的默认验证更改为验证onblur,并在stackoverflow社区的帮助下提交:Trigger validation of all fields in Angular Form submit
这适用于验证部分,但我现在似乎遇到一个问题,当我尝试在控制器中使用它们时,我的模型没有设置。
这个plunk有一个例子,我尝试记录user.mail的值:http://plnkr.co/edit/TOb2RRh6b5FenphLtSYS?p=preview
我知道我能做的就是这个指令:
scope.authenticate.userName = elm.val();
问题在于,这个指令只能用于该元素,因为它意味着硬编码元素的模型名
是否可以以不同的方式设置模型的值,或者将modelname放入指令中从而生成该变量?
答案 0 :(得分:0)
您遇到的问题是因为您永远不会告诉ngModel
要保留的值是什么(请查看NgModelController docs)。
您要查看的是$setViewValue
方法。
我forked your plunk here并添加了一个只转储用户的div,因此您可以看到正在发生的事情。
我对控制器所做的唯一更改是doValidation
函数:
function dovalidation() {
var email = elm.val();
if (EMAIL_REGX.test(email)) {
ctrl.$setViewValue(email); // set the model to the right value
ctrl.$setValidity('emails', true);
} else {
ctrl.$setViewValue(null); // invalid, so set the model to null
ctrl.$setValidity('emails', false);
}
}