Статьи

Создание веб-приложения с нуля с использованием AngularJS и Firebase: Часть 2

В первой части этой серии мы увидели, как начать создавать приложения с использованием AngularJS и Firebase . Мы создали страницу входа в систему и реализовали функцию входа в систему с Firebase в качестве серверной части.

В этом уроке мы перенесем эту серию на следующий уровень. Мы создадим и настроим страницу регистрации и посмотрим, как выполнять проверку формы в AngularJS.

Давайте начнем с клонирования первой части урока от GitHub.

1
git clone https://github.com/jay3dec/AngularJS_Firebase_Part1.git

После получения кода перейдите в каталог проекта и установите необходимые зависимости.

1
2
cd AngularJS_Firebase_Part1
npm install

Как только все зависимости установлены, запустите сервер.

1
npm start

Укажите в браузере http: // localhost: 8000 / app / # / home, и приложение должно быть запущено.

Мы начнем с создания страницы для регистрации гостевых пользователей. Перейдите в AngularJS_Firebase_Part1/app и создайте папку с именем register . Внутри папки register создайте файлы register.html и register.js . Вот как выглядит register.html :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html lang=»en»>
 
<head>
    <meta http-equiv=»Content-Type» content=»text/html; charset=UTF-8″>
    <link rel=»icon» href=»http://getbootstrap.com/favicon.ico»>
 
    <title>AngularJS & Firebase Web App</title>
 
    <link href=»http://getbootstrap.com/dist/css/bootstrap.min.css» rel=»stylesheet»>
    <link href=»http://getbootstrap.com/examples/signin/signin.css» rel=»stylesheet»>
 
    <link href=»justified-nav.css» rel=»stylesheet»>
 
</head>
 
<body>
 
    <div class=»container»>
        <div class=»jumbotron» style=»padding-bottom:0px;»>
            <h2>AngularJS & Firebase App!</h2>
        </div>
        <form class=»form-signin» role=»form»>
            <input type=»email» class=»form-control» placeholder=»Email address» required=»» autofocus=»»>
            <input type=»password» class=»form-control» placeholder=»Password» required=»»>
            <label class=»checkbox»>
                <a href=»#»> Sign In</>
        </label>
        <button type=»button» class=»btn btn-lg btn-primary btn-block»>Register</button>
      </form>
 
    </div>
 
</body></html>

Как видно из приведенного выше HTML-кода, мы использовали Bootstrap для нашего HTML-дизайна.

Внутри register.js мы объявим маршруты доступа приложения к представлению реестра. $routeProvider есть метод, который $routeProvider when , и мы будем использовать его для создания маршрута для нашего представления реестра. При определении нового маршрута мы установим templateUrl который будет отображаться в index.html . Наряду с этим, мы также установим controller для вновь созданной $scope представления реестра. Контроллер — это логика, которая контролирует конкретное представление. Вот как это должно выглядеть:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
‘use strict’;
 
angular.module(‘myApp.register’, [‘ngRoute’])
 
// Declared route
.config([‘$routeProvider’, function($routeProvider) {
    $routeProvider.when(‘/register’, {
        templateUrl: ‘register/register.html’,
        controller: ‘RegisterCtrl’
    });
}])
 
// Register controller
.controller(‘RegisterCtrl’, [function() {
 
}]);

Теперь откройте app.js и myApp.register в приложение модуль регистрации myApp.register .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
‘use strict’;
 
angular.module(‘myApp’, [
    ‘ngRoute’,
    ‘myApp.home’,
    ‘myApp.register’ // Newly added register route
]).
config([‘$routeProvider’, function($routeProvider) {
    // Set defualt view of our app to home
 
    $routeProvider.otherwise({
        redirectTo: ‘/home’
    });
}]);

Чтобы отобразить страницу регистрации, нам нужно включить register.js в основной файл шаблона HTML приложения. Откройте index.html и index.html следующее:

1
<script src=»register/register.js»></script>

Перезапустите сервер и укажите в браузере http: // localhost: 8000 / app / index.html # / register, и вы должны увидеть экран регистрации:

Экран регистрации для приложения AngularJS Firebase

Далее, давайте сделаем ссылку экрана регистрации на экран входа. В home.html и register.html есть sign up и sign in href соответственно. Мы установим оба источника href так, чтобы они были доступны с обеих страниц.

В home.html :

1
<a href=»#/register»> Sign Up<a/>

В register.html :

1
<a href=»#/home»> Sign In<a/>

Когда пользователь вводит свой адрес электронной почты и пароль на экране регистрации, нам нужно проверить несколько вещей. Во-первых, введенный идентификатор электронной почты должен иметь действительный формат идентификатора электронной почты, а во-вторых, введенный пароль должен иметь минимальную длину.

AngularJS предоставляет FormController , который отслеживает каждый элемент внутри формы. Из документов AngularJS:

FormController отслеживает все свои элементы управления и вложенные формы, а также их состояние, например, действительный / недействительный или грязный / нетронутый.

FormController имеет несколько свойств, таких как $pristine , $dirty , $invalid , $valid и т. Д. Мы посмотрим, что это за свойства, и мы будем использовать некоторые из этих свойств, чтобы реализовать проверку формы для нашей страницы регистрации.

Во-первых, нам нужно изменить нашу форму HTML, чтобы добавить сообщения проверки. В register.html измените форму HTML, как показано.

01
02
03
04
05
06
07
08
09
10
11
12
13
<form class=»form-signin» name=»regForm»>
    <div class=»form-group»>
        <label>Email</label>
        <input type=»email» name=»email» class=»form-control» ng-model=»user.email»>
        <p>Enter a valid email.</p>
    </div>
    <div class=»form-group»>
        <label>Password</label>
        <input type=»password» name=»password» class=»form-control» ng-model=»user.password»>
        <p>Min password length is 8 characters.</p>
    </div>
    <button type=»button» class=»btn btn-lg btn-primary btn-block»>Register</button>
</form>

Сохраните изменения, перезапустите сервер и обновите страницу register . Вы должны увидеть такую ​​страницу:

Страница регистрации приложения AngularJS Firebase

Теперь, как мы видим на приведенном выше экране, сообщения проверки доступны. Нам нужно показывать их только тогда, когда адрес электронной почты и пароль не действительны.

AngularJS предоставляет директиву ngShow для отображения HTML на основе определенного выражения. (Директива AngularJS — это расширенный атрибут HTML, предоставляемый AngularJS для расширения возможностей элементов.) Итак, мы будем использовать ngShow, чтобы показать сообщение проверки, когда входящее электронное письмо содержит недопустимые данные. Но как мы узнаем, что введенное письмо неверно? Хорошо, запомните свойства FormController которые мы обсуждали ранее. FormController имеет свойство с именем $invalid которое имеет значение True если элемент управления недействителен. regForm.email.$invalid будет иметь значение true, если введенный адрес электронной почты недействителен. Поэтому мы будем использовать $invalid и ngShow чтобы показать сообщение проверки. Измените диапазон сообщений электронной почты, как показано ниже:

1
<p ng-show=»regForm.email.$invalid»>Enter a valid email.</p>

Сохраните изменения, перезагрузите сервер и перейдите на страницу регистрации. Вы увидите, что сообщение для проверки идентификатора электронной почты больше не отображается. Теперь попробуйте ввести некоторые данные в адрес электронной почты, и появится сообщение об ошибке. Попробуйте ввести действующий адрес электронной почты, и сообщение для проверки исчезнет. Но сообщение для минимальной длины пароля по-прежнему отображается изначально. Давайте исправим это.

AngularJS предоставляет другую директиву, называемую ng-minlength, чтобы установить минимальную длину для любого элемента управления вводом. Мы будем использовать это, чтобы установить минимальную длину поля пароля, а затем используем ngShow чтобы показать / скрыть сообщение проверки. Измените поле пароля, включив в ng-minlength директиву ng-minlength как показано ниже:

1
<input type=»password» name=»password» class=»form-control» ng-model=»user.password» ng-minlength=»8″>

Затем измените диапазон сообщения проверки для поля пароля, как показано:

1
<p ng-show=»regForm.password.$error.minlength»>Min password length is 8 characters.</p>

Таким образом, если минимальная длина поля пароля не соответствует минимальной длине, установленной в поле ввода пароля, то для regForm.password.$error.minlength будет установлено значение «истина», и будет показано сообщение проверки.

Сохраните все изменения, перезагрузите сервер и перейдите на страницу регистрации. Попробуйте ввести значение для пароля, и сообщение проверки будет отображаться, пока длина пароля не станет 8.

Теперь, чтобы выделить недопустимые элементы ввода, мы можем использовать некоторые стили. Используя директиву AngularJS с именем ngClass, мы можем динамически выделять ошибочные элементы ввода, используя свойство $invalid . Поэтому добавьте директиву ngClass в родительский div элементов email и password.

01
02
03
04
05
06
07
08
09
10
11
<div class=»form-group» ng-class=»{ ‘has-error’ : regForm.email.$invalid }»>
    <label>Email</label>
    <input type=»email» name=»email» class=»form-control» ng-model=»user.email»>
    <p class=»help-block» ng-show=»regForm.email.$invalid»>Enter a valid email.</p>
</div>
 
<div class=»form-group» ng-class=»{ ‘has-error’ : regForm.password.$invalid }»>
    <label>Password</label>
    <input type=»password» name=»password» class=»form-control» ng-model=»user.password» ng-minlength=»8″>
    <p class=»help-block» ng-show=»regForm.password.$error.minlength»>Min password length is 8 characters.</p>
</div>

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

Сообщения проверки, отображаемые на странице регистрации

Теперь, как вы можете видеть на приведенном выше экране, при ошибках проверки кнопка « Register включена. Давайте отключим его, если только введенные адрес электронной почты и пароль не действительны AngularJS предоставляет директиву ngDisabled, которая помогает отключать элементы на основе выражения. Если email и password подтверждены, то user.email user.password модели user.email и user.password . Итак, мы будем использовать эти два объекта для включения / выключения кнопки регистрации с помощью ngDisabled . Измените кнопку регистрации HTML, как показано:

1
<button type=»button» ng-disabled=»!user.email || !user.password» class=»btn btn-lg btn-primary btn-block»>Register</button>

Как видите, ng-disabled будет иметь значение true, если user.email или user.password не равно false, что будет иметь место только в том случае, если данные недействительны.

Сохраните все изменения, перезагрузите сервер и обновите страницу регистрации. Как вы заметите, кнопка «Регистрация» отключена и будет оставаться до тех пор, пока не будут введены действительный адрес электронной почты и пароль.

Экран регистрации с отключенной кнопкой «Регистрация»

Внедрение проверки на экране входа в систему очень похоже на то, как мы это делали для экрана регистрации. Я бы посоветовал вам выполнить проверку самостоятельно для экрана входа в качестве упражнения. Если вы застряли, посмотрите на измененный HTML-код для формы home.html в home.html как показано ниже:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<form class=»form-signin» name=»signinForm» role=»form»>
    <div class=»form-group» ng-class=»{ ‘has-error’ : signinForm.email.$invalid }»>
        <label>Email</label>
        <input type=»email» name=»email» class=»form-control» ng-model=»user.email»>
        <p class=»help-block» ng-show=»signinForm.email.$invalid»>Enter a valid email.</p>
    </div>
    <div class=»form-group» ng-class=»{ ‘has-error’ : signinForm.password.$invalid }»>
        <label>Password</label>
        <input type=»password» name=»password» class=»form-control» ng-model=»user.password» ng-minlength=»3″>
        <p class=»help-block» ng-show=»signinForm.password.$error.minlength»>Min password length is 8 characters.</p>
    </div>
    <label class=»checkbox»>
        <a href=»#/register»> Sign Up</a>
    </label>
    <button ng-disabled=»!user.email || !user.password» type=»button» ng-click=»SignIn($event)» class=»btn btn-lg btn-primary btn-block»>SignIn</button>
</form>

В этой части руководства мы создали страницу регистрации и настроили маршруты для нее. Мы также увидели, как реализовать проверки с использованием AngularJS для страницы регистрации.

В следующей части мы сосредоточимся на реализации функции регистрации и нескольких других функциях. Исходный код из приведенного выше учебника доступен на GitHub .

Дайте нам знать ваши мысли в комментариях ниже!