解除绑定后,修复AngularJS中模型和视图之间的断开连接

时间:2013-06-10 14:02:13

标签: angularjs angularjs-directive

我设法将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放入指令中从而生成该变量?

1 个答案:

答案 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);
  }
}