0

在stackoverflow社区的帮助下,我设法将AngularJS的默认即时验证更改为onblur和提交验证:Trigger validation of all fields in Angular Form submit

这适用于验证部分,但我现在似乎遇到了一个问题,即当我尝试在控制器中使用模型时未设置模型。

这个 plunk 有一个示例,我尝试记录 user.mail 的值:http ://plnkr.co/edit/TOb2RRh6b5FenphLtSYS?p=preview

我知道我可以在指令中这样做:

 scope.authenticate.userName = elm.val();

这样做的问题是,这将使该指令仅可用于该元素,因为这意味着对元素的模型名称进行硬编码

是否可以以不同的方式设置模型的值,或者将模型名称放入指令中,从而使该变量成为变量?

4

1 回答 1

0

您看到的问题是因为您从不ngModel知道要保留的值是什么(查看NgModelController 文档)。

你要看的是$setViewValue方法。

我已经在这里分叉了你的 plunk并添加了一个 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);
  }
}
于 2013-06-10T14:38:28.000 回答