Angularjs 如何在不需要触摸输入的情况下强制ngMessages显示错误

Angularjs 如何在不需要触摸输入的情况下强制ngMessages显示错误,angularjs,Angularjs,我正在开发多页web应用程序(不是一个角SPA)。 在某些情况下,我必须呈现带有嵌入验证错误的页面(如HTTP POST后失败的登录尝试)。 我希望这些错误在页面加载时以角度显示。 我已经创建了自定义验证器(现在的指令称之为odd)。 但似乎显示它们的唯一方法是模糊每个单独的输入字段 <md-input-container> <label>Email</label> <input name="j_username" type="email" ng

我正在开发多页web应用程序(不是一个角SPA)。 在某些情况下,我必须呈现带有嵌入验证错误的页面(如HTTP POST后失败的登录尝试)。 我希望这些错误在页面加载时以角度显示。 我已经创建了自定义验证器(现在的指令称之为
odd
)。 但似乎显示它们的唯一方法是模糊每个单独的输入字段

<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>

电子邮件
在服务器端预先呈现一些错误消息
以下是代码笔的链接: 单击电子邮件,然后松开焦点,您将看到出现错误消息


问题是:如何强制angular在页面加载时显示表单上所有字段的所有验证消息?

这可能是一种快捷方式,但在我将此设置超时添加到自定义验证程序后,页面加载时会根据需要出现错误。 如果有人知道更好的方法,请告诉我

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

这里有一个更新的片段:

我自己刚刚遇到这个问题。此线程非常有用:

您要做的是将ng show=“login.$submitted”添加到您的ng messages元素中。 ng消息仍将像以前一样工作,如果输入被“触摸”或修改,则会弹出错误消息,但它也会添加您想要的内容,即在用户尝试提交时显示错误消息

当用户尝试提交表单时,角度表单变量login.$submitted将设置为true(即使提交未成功)

这是绝对必要的,如果你是使用角材料。然后您甚至不需要使用ng show=“login.$submitted”

<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> 
angular.module('app', ['ngMessages']);