如何强制ngMessages显示错误而不需要触摸输入
我正在开发多页面的web应用程序(不是Angular SPA)。 在某些情况下,我必须渲染带有内嵌验证错误的页面(例如HTTP POST后失败的登录尝试)。 我希望这些错误在页面加载时通过角度显示。 我已经创建了自定义验证器(现在指令称为odd
)。 但它似乎让他们显示的唯一方法是从每个单独的输入字段模糊。如何强制ngMessages显示错误而不需要触摸输入
<md-input-container>
<label>Email</label>
<input name="j_username" type="email" ng-model="j_username" odd="false" md-autofocus />
<div ng-messages="login.j_username.$error">
<span ng-message="odd">Some error message prerendered on a server side</span>
</div>
</md-input-container>
这里是一个链接codepen:http://codepen.io/anon/pen/RGRgoN 点击电子邮件,然后松焦点,你会看到错误消息出现。
问题是:如何强制角度在页面加载时显示窗体上所有字段的所有验证消息?
可能是一个快捷方式,但在将此setTimeout添加到我的自定义验证程序错误后,根据需要开始出现在页面加载中。 如果有人知道更好的方式,请让我知道!
app.directive("hasVe", function() {
return {
restrict : "A",
require : "ngModel",
link : function(scope, element, attributes, ngModel) {
var hasVe = attributes.hasVe;
ngModel.$validators.hasVe = function(modelValue) {
return hasVe !== "true";
};
// NOTE: This looks like a shortcut, but it works
setTimeout(function() {
ngModel.$touched = true;
scope.$apply();
}, 100);
}
};
});
这里是一个更新的摘要:http://codepen.io/anon/pen/RGRmpY
过这个问题,刚来到自己。这个线程是有帮助的:show validation error messages on submit in angularjs
你想要做的是添加ng-show =“登录。$提交”到您的ng-messages元素。 ng消息将仍然工作它以前的方式,如果输入已被“触摸”或修改,弹出错误消息,但它也增加了你想要的,这是如果用户尝试显示错误消息提交。
当用户尝试提交表单,角表单变量登录。$提交被设置为true(即使提交不成功)
<div ng-messages="login.j_username.$error" ng-show="login.$submitted">
<span ng-message="odd">Some error message prerendered on a server side</span>
</div>
此外,请务必在ngMessages您应用程序启动:https://docs.angularjs.org/api/ngMessages#module-installation
angular.module('app', ['ngMessages']);
如果您正在使用角料,这是绝对必需的。然后你甚至不需要使用ng-show =“登录。$提交”