Статьи

HTML-формы в AngularJS

Из этого туториала вы узнаете, как собирать и проверять данные HTML-форм с помощью двусторонней привязки данных AnguarlJS. В этом уроке мы узнаем, как реализовать простую форму регистрации пользователей с помощью Angular. Попутно мы рассмотрим базовый HTML и покажем, что нужно изменить, чтобы включить AngularJS.

Prerequisities

Форма HTML

HTML-код для нашей формы регистрации показан ниже. Bootstrap был использован, чтобы сделать сайт более визуально привлекательным.

<html lang="en" ng-app="myApp"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrap 101 Template</title> <link href="css/bootstrap.min.css" rel="stylesheet" /> <link rel="stylesheet" href="css/app.css" /> </head> <body> <form class="form-horizontal" role="form"> <div class="form-group"> <label for="inputName3" class="col-sm-2 control-label">Name</label> <div class="col-sm-4"> <input class="form-control" id="inputName3" placeholder="Name"> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">Email</label> <div class="col-sm-4"> <input class="form-control" id="inputEmail3" placeholder="Email"> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-2 control-label">Password</label> <div class="col-sm-4"> <input class="form-control" id="inputPassword3" placeholder="Password"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-success">Sign up</button> </div> </div> </form> <script src="lib/common/jquery.min.js"></script> <script src="lib/common/bootstrap.min.js"></script> <script src="lib/angular/angular.js"></script> <script src="lib/angular/angular-route.js"></script> <script src="js/app.js"></script> <script src="js/services.js"></script> <script src="js/controllers.js"></script> <script src="js/filters.js"></script> <script src="js/directives.js"></script> </body> </html> 

Форма должна выглядеть следующим образом.

Пример формы

Сбор данных

В jQuery отдельные входы формы читаются с использованием кода, подобного следующему:

 $('#txtInput').val() 

Поскольку AngularJS поддерживает двустороннюю привязку данных, нам не нужно явно читать входные данные. Вместо этого, когда изменяется форма ввода, она автоматически отражается в области $scope контроллера. Чтобы убедиться в этом, добавьте следующий span в HTML перед тегом закрывающей form . Этот сниппер использует переменную с именем formInfo .

 <span>{{formInfo}}</span> 

AngularJS имеет директиву с именем ng-model которая помогает связать входные данные с переменной. Давайте применим директиву ng-model к трем элементам ввода в форме. Вот обновленная форма HTML:

 <form class="form-horizontal" role="form"> <div class="form-group"> <label for="inputName3" class="col-sm-2 control-label">Name</label> <div class="col-sm-4"> <input class="form-control" id="inputName3" placeholder="Name" ng-model="formInfo.Name"> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">Email</label> <div class="col-sm-4"> <input class="form-control" id="inputEmail3" placeholder="Email" ng-model="formInfo.Email"> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-2 control-label">Password</label> <div class="col-sm-4"> <input type="password" class="form-control" id="inputPassword3" placeholder="Password" ng-model="formInfo.Password"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-success">Sign up</button> </div> </div> <span>{{formInfo}}</span> </form> 

Как вы можете видеть, директива ng-model была присоединена к каждому из элементов ввода. Каждый вход связан с определенным полем в объекте formInfo . Теперь, когда пользователь вводит данные в элементы ввода, formInfo автоматически обновляется. Вы можете увидеть этот код в действии, посмотрев эту рабочую демонстрацию . Используя ту же переменную formInfo мы можем получить доступ к данным формы, не считывая каждое значение элемента отдельно в нашем контроллере. Для этого нам нужно определить переменную $scope.formInfo внутри нашего контроллера MyCtrl1 . После внесения этих изменений вот как выглядит app/js/controllers.js :

 'use strict'; /* Controllers */ angular.module('myApp.controllers', []). .controller('MyCtrl1', ['$scope', function($scope) { $scope.formInfo = {}; $scope.saveData = function() { }; }]) .controller('MyCtrl2', [function() { }]); 

Мы также определили функцию с именем saveData() которая будет вызываться, когда пользователь нажимает кнопку «Зарегистрироваться».

Далее нам нужно прикрепить директиву ng-controller к самой форме.

 <form class="form-horizontal" role="form" ng-controller="MyCtrl1"> 

Затем прикрепите директиву ng-click к ng-click «Зарегистрироваться»:

 <button type="submit" ng-click="saveData()" class="btn btn-success">Sign up</button> 

Внутри функции saveData() добавьте console.log($scope.formInfo); просто чтобы проверить, получаем ли мы сбор данных формы в нашем контроллере с использованием $scope . Перезапустите сервер узла, перейдите на страницу HTML и проверьте консоль браузера. Вы должны увидеть что-то вроде этого:

 Object {Name: "Jay", Email: "[email protected]", Password: "helloworld"} 

Теперь эти собранные данные можно хранить в базе данных.

Проверка входных данных

Нам также необходимо проверить, действительны ли данные, полученные нами из $scope . Если это не так, мы должны показать некоторые ошибки проверки. Директива ng-show показывает или скрывает элемент на основе значения выражения. Мы будем использовать его для отображения сообщений об ошибках. Начните с определения трех переменных $scope$scope.nameRequired , $scope.emailRequired и $scope.passwordRequired . Мы saveData() имя, адрес электронной почты и пароль в функции saveData() как показано в обновленном saveData() app/js/controllers.js .

 'use strict'; /* Controllers */ angular.module('myApp.controllers', []) .controller('MyCtrl1', ['$scope', function($scope) { $scope.formInfo = {}; $scope.saveData = function() { $scope.nameRequired = ''; $scope.emailRequired = ''; $scope.passwordRequired = ''; if (!$scope.formInfo.Name) { $scope.nameRequired = 'Name Required'; } if (!$scope.formInfo.Email) { $scope.emailRequired = 'Email Required'; } if (!$scope.formInfo.Password) { $scope.passwordRequired = 'Password Required'; } }; }]) .controller('MyCtrl2', [function() { }]); 

На странице HTML добавьте span для каждого элемента ввода, чтобы отобразить сообщение об ошибке, как показано ниже;

 <span ng-show="nameRequired">{{nameRequired}}</span> <span ng-show="emailRequired">{{emailRequired}}</span> <span ng-show="passwordRequired">{{passwordRequired}}</span> 

Перезапустите сервер узла и попробуйте нажать кнопку «Зарегистрироваться» с пустыми элементами ввода. Вы должны увидеть соответствующие сообщения об ошибках.

Вывод

В этом уроке мы узнали, как читать данные из формы и проверять их с помощью AngularJS. Я бы порекомендовал прочитать документацию по AngularJS API для более глубокого понимания. Тем временем, рабочая демонстрация доступна здесь .