AngularJs часто рассматривается как жизнеспособное решение для создания полнофункциональных одностраничных веб-приложений. Хотя это хороший вариант использования Angular, в этой статье мы рассмотрим, как можно также использовать инфраструктуру для постепенного добавления функциональности на любую веб-страницу в целом, в некоторых случаях практически не требуется Javascript ( пример ).
Начальное намерение Angular
До того, как Angular стал средой с открытым исходным кодом, он задумывался как инструмент разработки, ориентированный в основном на веб-дизайнеров. Инфраструктура позволила бы дизайнерам улучшить HTML-страницы и дать им возможность проверять и сохранять формы прозрачным способом (см. Ссылку здесь ).
Первоначальная идея состояла в том, чтобы позволить дизайнерам использовать некоторые дополнительные HTML-теги или атрибуты для добавления динамических возможностей на веб-страницу без необходимости писать какой-либо Javascript вообще.
Использование Angular постепенно в существующих приложениях
В настоящее время Angular, вероятно, будет использоваться в качестве основной инфраструктуры MVC для веб-приложений со средними и большими масштабами. Но Angular также можно использовать для постепенного добавления функциональности к существующим веб-приложениям способом, очень похожим на то, как он изначально предназначался для использования.
Давайте приведем один конкретный пример: проверка формы.
Пример: использование Angular для проверки формы
В сжатых и сжатых 44 КБ Angular упаковывает много интересных функций для динамической проверки формы.
Возьмите, например, следующую форму для создания пользователя, она делает следующее (попробуйте jsfiddle ):
- мелирование поле ошибки динамически , как мы печатаем
- предоставлять встроенные сообщения, пока пользователь печатает в поле
- отключите кнопку отправки, пока все необходимые данные не будут доступны и флажок условий и положений не установлен
Для рабочей версии этой формы, реализующей вышеуказанную функциональность, проверьте следующий репозиторий github (или jsfiddle ) .
Обратите внимание, что в приведенном выше примере требуется только одна строка кода Javascript , необходимая для импорта ng-messages
модуля:
angular.module('DemoApp', ['ngMessages']);
Кроме того, вся функциональность основана на встроенных директивах Angular и ng-messages
.
Угловая форма директивы
Когда Angular компилирует DOM внутри ng-app
, он применяет к тегам формы встроенную директиву формы. В случае вышеупомянутой формы это означает, что начальный HTML формы будет выглядеть примерно так:
<form class="ng-pristine ng-invalid ng-invalid-required" name="frm"> </form>
Обратите внимание на странный вид ng-pristine
и ng-invalid
классы, которые Angular автоматически добавляет в зависимости от состояния формы.
Как работают эти встроенные классы состояния?
Эти классы применяются как к форме, так и к отдельным полям ввода, и их можно использовать для стилизации формы. Angular предоставляет следующие состояния:
- ng-нетронутый: это означает, что форма или ввод находится в исходном состоянии: нет полей ввода, где они были затронуты или отредактированы
- ng-touch: элемент управления или форма были нажаты пользователем, но не обязательно отредактированы
- ng-dirty: элемент управления вводом отредактировал пользователь
- ng-invalid: элемент управления формы был отредактирован, но содержит недопустимое значение
- ng-valid: элемент управления вводом был отредактирован пользователем и содержит допустимое значение
Например, ng-invalid
состояние может быть использовано для рисования красной границы вокруг полей по ошибке.
Угловые встроенные директивы проверки
Проверки каждого поля могут быть объявлены непосредственно в HTML. Например, поле пароля имеет следующие проверки:
- поле является обязательным
- минимальная длина 6 символов
- максимальная длина 10 символов
Эти проверки объявляются с использованием директив required
, ng-minlength
and
ng-maxlength
:
<input name="password" ng-model="user.password" type="password" placeholder="Password" required ng-minlength="6" ng-maxlength="10">
Смотрите здесь полный список встроенных директив, которые могут быть применены к вводу формы. Также возможно создать наши собственные директивы валидации.
Улучшенная проверка формы с помощью сообщений ng
Пока пользователь вводит данные, полезно показать сообщение, информирующее его о следующем шаге в процессе проверки, например:
- сначала покажите, что поле обязательно для заполнения
- когда пользователь начинает печатать, показать сообщение с указанием минимальной длины
Вот как должна выглядеть форма с несколькими ее компонентами, грязными и недопустимыми:
Эта функциональность может быть реализована с использованием директивы ng-messages :
<div class="pure-control-group"> <label>Password</label> <input name="password" ng-model="user.password" type="password" placeholder="Password" required ng-minlength="6" ng-maxlength="10"> <div class="field-message" ng-messages="frm.password.$error" ng-if='frm.password.$dirty' ng-cloak> <div ng-message="required">Password is required</div> <div ng-message="minlength"> Password must have minimum 6 characters </div> <div ng-message="maxlength"> Password must have maximum 10 characters </div> </div> </div>
Управление состоянием кнопки отправки
Кнопка отправки может быть включена / отключена в соответствии с действительностью формы и флажком условия, используя ng-disabled
директиву:
<button type="submit" class="pure-button pure-button-primary" ng-disabled="frm.$invalid || !conditions">Submit</button>
Выводы
Используя встроенные директивы Angular и некоторые дополнительные модули, можно добавить множество функций в существующее веб-приложение.
В конкретном случае проверки формы это можно сделать практически без использования Javascript (см. Приведенный выше пример ) и с минимальными затратами (сжатые и сжатые 44 КБ) аналогично другим альтернативам.
Но проверка формы — это всего лишь пример того, как Angular также может использоваться за пределами контекста одностраничного веб-приложения.
Любое существующее приложение может использовать его для небольших улучшений, таких как проверка формы или реализация определенного виджета.
Рекомендации
Подробное описание проверки формы Angular можно найти в этом скринкасте (pre-ngMessages).