我在填写表单时编写了一些自定义验证代码,但需要将 $timeout
设置为 > 100 毫秒才能使其正常工作,我很好奇找到找出原因。
所需的表单元素遵循此格式。如果输入错误,我添加“novalidate”类:(观察,表单中有大量这些元素)
<div class="dottedWrapper" ng-class="{novalidate:(newController.jobDescription.length == 0) && newController.formSubmitted}">
提交表单时,我检查是否有任何元素具有“novalidate”类并返回。
self.formSubmitted = true;
$timeout(function () {
// Validate!
if (document.getElementsByClassName("novalidate").length > 0) {
return;
}
...
}, 100); // MUST SET AT LEAST 100ms for it to work in safari
但是,只有当我在 Safari 中将时间设置为大约 100 毫秒以上时,这才有效。在chrome中,只需将其设置为1ms即可。
如果我错了,请纠正我,但这是我的想法,请记住我是 Angular 新手:
我在开头设置了“
self.formSubscribed = true;
”。这会导致通过双向数据绑定(bind)对所有 div 进行更新,因为“formSubscribed”包含在 ng 类内。这是通过摘要循环完成的,这意味着我无法在摘要循环大多数运行一次并更新所有内容之后直接运行“
document.getElementsByClassName("novalidate")
” 。所以...我使用
$timeout
,认为它会让当前的摘要循环运行,然后跳转到下一个摘要循环。此时,所有元素都应该更新。
最佳答案
您正在破坏 MVC 模式。不要这样做 - 这是不好的做法。
你为什么不这样做:
if (self.jobDescription.length == 0 && self.formSubmitted)
return;
关于javascript - AngularJS:在带有 $timeout 的摘要循环后运行(Safari 与 chrome),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33561536/