Статьи

Пристальный взгляд на модуль Angular ngMessages

Эта статья была рецензирована Марком Таулером и Стефаном Максом . Спасибо всем рецензентам SitePoint за то, что сделали контент SitePoint как можно лучше!

Благодаря своей способности помогать разработчикам создавать лучший пользовательский опыт при создании форм, модуль ngMessages стал основной директивой с выпуском Angular 1.3. Год спустя команда разработчиков Angular продолжила разработку этого модуля, чтобы обеспечить его разработчиками возможностью отображать сообщения об ошибках с помощью шаблонов, добавлять анимацию к сообщениям об ошибках и многое другое. В конце августа я опубликовал статью об использовании модуля ngMessages для проверки основных форм . В этой статье были показаны основы работы этого модуля, а в этой статье рассматриваются некоторые другие функции, к ngMessages нам предоставляет доступ ngMessages .

Модуль ngMessages

При добавлении в приложение Angular API ngMessages предоставляет пользователям следующие директивы для управления сообщениями об ошибках:

В этой статье мы рассмотрим каждую из этих директив, чтобы получить четкое представление о том, как они работают и почему они полезны.

Основы нг-сообщений и нг-сообщений

Давайте посмотрим, какую роль играют директивы ng-message и ng-messages в отображении сообщений об ошибках.

Выше мы видим некоторый код для проверки базового HTML-элемента textarea . Для того чтобы ngMessages работал, он полагается на объект $error ng-model чтобы сообщить приложению, прошел ли ввод проверку или нет. Как только пользователь ngMessages от поля, ngMessages отобразит поля ошибок соответственно. В приведенном выше примере ng-model присутствует внутри input тега с именем userInput . В результате этого ng-messages знает, что нужно искать информацию о нашем поле ввода. В этом примере ng-messages будут отображать сообщения в соответствии с ng-minlength , ng-maxlength и required атрибутами. Важно отметить, что Angular будет отображать эти сообщения об ошибках в порядке их появления в нашем html.

Краткое примечание по использованию ngMessages с ngIf

Чтобы эти сообщения об ошибках не отображались автоматически, мы можем использовать ngIf . При использовании директива ng-if удаляет или воссоздает раздел DOM в зависимости от различных обстоятельств.

Изучив приведенный ниже пример, мы увидим, что код аналогичен первому примеру, однако ng-if был добавлен к нашему родительскому ng-messages . Внутри этого оператора ng-if мы можем передать значение $dirty для отображения сообщений об ошибках, пока пользователь взаимодействует с полем ввода. Сказав это, мы можем видеть наши сообщения об ошибках, которые отображаются при вводе в text-area ниже, что все благодаря директиве ng-if .

ngMessagesInclude

Команда Angular уделяет большое внимание тому, чтобы позволить разработчикам создавать поддерживаемые модульные веб-приложения. Они хотят, чтобы вы сохранили свой код как можно более ngMessagesInclude , и это очень очевидно при использовании директивы ngMessagesInclude . При реализации в приложении Angular директива ng-messages-include позволяет разработчикам повторно использовать пользовательские шаблоны сообщений. Первоначально ngMessagesInclude должен был использоваться в качестве дополнительного атрибута в родительской директиве ng-messages , однако это изменилось в выпуске 1.4. Теперь ngMessagesInclude является собственной директивой, которая должна использоваться в качестве дочернего элемента для директивы ng-messages , как и директива ng-message мы видели в первом примере.

Повторное использование шаблонов

Ниже мы видим пример того, как эта директива позволяет нам отображать ряд сообщений об ошибках. Вместо того, чтобы записывать несколько дочерних директив ng-message , ng-messages-include позволяет нам передавать шаблон сообщений с одной строкой кода. Чтобы сделать это, все, что нам нужно сделать, это передать идентификатор этого шаблона сообщения в эту директиву для его работы.

Перезапись сообщений об ошибках

Директива ng-messages-include также может использоваться вместе с ng-message чтобы обеспечить решения для незначительных настроек сообщений об ошибках. В приведенном ниже примере мы видим, что обе эти директивы присутствуют. Если мы взаимодействуем с формой, мы видим, что ng-message используется для переопределения minlength сообщения, определенного внутри message-template .

В результате этого разработчикам не нужно беспокоиться о проблемах, возникающих в ситуациях, когда им может потребоваться изменить вывод сообщения об ошибке для данного поля. В приведенном выше minlength сообщение minlength формируется вокруг вопроса больше, и это показывает пример того, как это полезно. Кроме того, важно отметить порядок ng-message и ng-messages-include . Если ng-message не определено первым, оно не будет перезаписывать сообщение внутри шаблона.

ngMessagesExp

Далее, давайте взглянем на директиву ng-messages-exp выпущенную в Angular 1.4. При реализации внутри контейнера ng-messages разработчики могут использовать эту директиву для динамического отображения сообщений об ошибках с помощью выражений. Это очень мощный инструмент, поскольку он позволяет разработчикам асинхронно отображать сообщения, в зависимости от ответа сервера. Однако, ради этого руководства, пример, который мы рассмотрим, будет строго иметь дело с кодом на стороне клиента.

В приведенном выше примере мы видим text-area очень похожую на примеры, которые мы рассматривали до сих пор, однако наш HTML-код несколько отличается. В этом примере комбинируется ng-repeat с ng-message-exp для отображения сообщений об ошибках, установленных с помощью $scope.messages зависимости от входного значения. Посмотрев на этот пример, мы увидим, что ng-repeat используется для перебора данных, передаваемых в свойство messages . Теперь, когда пользователь заполняет форму, ng-messages-exp проверит это свойство, чтобы найти правильное выражение, и отобразит его описания. Если мы заглянем в наш код, то увидим, что minlength и maxlength были переданы во втором объекте в свойстве messages . В результате этого ng-messages-exp будет знать, как оценить оба этих значения, и отобразить это сообщение об ошибке динамически. Хотя это довольно просто, оно показывает, сколько дверей открывает разработчикам использование ng-message-exp поскольку оно будет выполнять логику для нас, и дает убедительный пример того, насколько мощным инструментом является эта директива.

Заключительные слова

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