angularjs: ng-сообщение всегда отображается

Я использую угловые сообщения для отображения ошибок проверки формы в моем угловом приложении. Согласно документации, я построил следующий код

<form name="loginForm">
  <label class="item item-input">
    <input type="email" placeholder="Email" ng-model="data.email" name="email" required>
  </label>
  <div ng-messages="loginForm.email.$error" style="color:maroon">
    <div ng-message="required">Please input a valid e-mail address</div>
    <div ng-message="email">You did not enter your email address correctly...</div>
  </div>
</form>

Я включил директиву ngMessages в свой javascript, а также импортировал файл angular-messages.js.

К сожалению, эти два сообщения отображаются постоянно. Независимо от того, что я ввожу в поле ввода, будь то действительный адрес электронной почты или нет. Оба сообщения всегда отображаются. Если я попытаюсь включить только одно ng-сообщение, результат будет таким же.

Что я могу делать неправильно?

редактировать: если мое описание не очень понятно, это распечатка результата https://s9.postimg.cc/du9230tdb/Screen_Shot_2015_06_26_at_17_09_24.png


person Paraphiliac Ostrich    schedule 25.06.2015    source источник
comment
@ostrich, в чем была настоящая проблема с javascript? Я испытываю ту же проблему. Полностью потерян!   -  person JenonD    schedule 16.03.2016


Ответы (3)


Кажется, все в порядке в коде, которым вы делитесь.

<form name="loginForm">
    <label class="item item-input">
        <input type="email" placeholder="Email" ng-model="data.email" name="email" required>
    </label>
    <div ng-messages="loginForm.email.$error" style="color:maroon">
        <div ng-message="required">Please input a valid e-mail address</div>
        <div ng-message="email">You did not enter your email address correctly...</div>
    </div>
</form>

Вот рабочая копия Plunker Я использую ваш код.

Из документации по Angularjs.

По умолчанию ngMessages отображает только одну ошибку за раз. Однако, если вы хотите отобразить все сообщения, то флаг атрибута ng-messages-multiple можно использовать для элемента, содержащего директиву ngMessages, чтобы это произошло.

Если вы хотите отобразить ошибки после того, как поле заполнено, перейдите по этой ссылке.

Убедитесь, что вы также включаете модуль ngMessage и библиотеку. См. ответ Карлоса.

Спасибо

person jlulloav    schedule 26.06.2015
comment
Я серьезно не понимаю, что здесь может быть не так. У меня есть точно такой же код для формы в моем проекте, как и у вас в Plunker (за исключением импорта js, который выполняется локально), но результат отличается. Просто чтобы было понятно, я не хочу показывать несколько сообщений одновременно. Но это то, что происходит в любом случае. Вот распечатка результата s9.postimg.org/du9230tdb/Screen_Shot_2015_06_26_at_17_09_24.png - person Paraphiliac Ostrich; 26.06.2015
comment
Я также могу опубликовать принтскрин моего кода, если хотите, хотя из-за боязни какой-нибудь глупой опечатки я скопировал код из вашего плункера. До сих пор не работает. Спасибо за ваш пост, хотя - person Paraphiliac Ostrich; 26.06.2015
comment
Вот что мне нужно, чтобы понять это. 1- Скриншот вашего кода. 2- Откройте chrome devtools и дважды проверьте, нет ли ошибок на консоли (при условии, что вы используете Chrome :)). Я рад помочь. Спасибо - person jlulloav; 26.06.2015
comment
HTML-код в порядке. Не могли бы вы поделиться кодом javascript? Мы быстро выясним проблему, если вы можете поделиться кодом с помощью Github, не уверен, что это возможно для вас. - person jlulloav; 26.06.2015
comment
О Боже. Мне даже в голову не пришло, что проблема может быть в javascript, поскольку все, что мне нужно было сделать, это добавить модуль ngMessages. Оказывается, я делал это не в том месте. Странно, что ошибок не выдает. В любом случае, вы привели меня к решению. Примите мою глубочайшую благодарность. - person Paraphiliac Ostrich; 27.06.2015
comment
Не забудьте добавить 'ngMessage' в ваше приложение: angular.module('yourApp', ['ngMessages'])... - person Refael; 01.02.2016
comment
без включения ngMessages, почему работает обычное сообщение об ошибке ввода? Но не <input type="email"? - person Shawn; 11.05.2016

Вы должны убедиться, что вы действительно включаете ngMessage в свой модуль.

var app = angular.module('app', [
    'ngMessages'
])

... и что вы включили библиотеку в свой проект

<script src="/scripts/vendors/angular-messages/angular-messages.js"></script>
person Carlos A. Cabrera    schedule 17.07.2015
comment
У меня была та же проблема, и ваше решение - это именно то, что я забыл проверить. Я следил за курсом Pluralsight: «Бизнес-приложения AngularJS». Материал курса основан на Angular 1.2, поэтому в нем не описывается, как использовать ng-message (функция 1.3+). - person dev'd; 24.09.2015
comment
Вы спасли мою жизнь! Спасибо! - person Thịnh Phạm; 10.06.2016

Проверить с

<div ng-messages="loginForm.email.$error" ng-show="loginForm.email.$invalid && loginForm.email.$touched">
...
</div>

Этот трюк спас мой день.

person Kumar KS    schedule 19.12.2016
comment
Это, конечно, сработает, но это обман - на самом деле вы больше не используете функциональность ng-messages, а используете ng-show для выполнения того же самого. - person see sharper; 29.08.2017