Этот урок связан с проектом Создание приложения на AngularJS и Firebase

Создание приложения на AngularJS и Firebase

В данной серии уроков мы задействуем AngularJS и Firebase в создании простого веб приложения. Это будет простая блог-платформа, в которой каждый сможет зарегистрироваться и опубликовать свой пост.

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

Что такое AngularJS?

AngularJS – один из самых популярных JavaScript фрэймворков, реализующих MVC. С его помощью можно создавать динамический веб-приложения, используя возможности HTML. Использование современных подходов таких как биндинг данных и внедрения зависимостей позволяют выиграть время за счёт компактности кода.

Что такое Firebase?

Firebase позволяет осуществлять синхронизацию данных в режиме реального времени без нужды в разработке бэк-энда. Для работы с данным сервисом нужно всего-навсего осуществлять запросы к их API.

API Firebase обладает всеми нужными функциями для хранения и синхронизации данными в режиме реального времени. Комбинирование возможностей AngularJS и Firebase позволяет добиться внушительных результатов.

Начало работы с AngularJS

Для начала работы с AngularJS можно воспользоваться проектом angular-seed. Закачать его можно из репозитория.

$ git clone https://github.com/angular/angular-seed.git

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

$ cd angular-seed
$ npm install ## Установка зависимостей

Запускаем node сервер

npm start ## Запуск сервера

Отправляемся по адресу http://localhost:8000/app/index.html и видим отображение стандартного проекта.

Откройте каталог проекта angular-seed. Тут будет располагаться весь код проекта. Внутри каталога app вы сможете найти файл app.js, который является основным файлом приложения. Внутри данного файла мы определим основные модули и маршруты. По умолчанию в проекте angular-seed есть два представления: view1 и view2. Удалите каталоги view1 и view2 из папки app.

Давайте начнём всё с нуля. Открываем файл app.js и удаляем весь код. В файле app.js будут определены маршруты нашего приложения. К примеру, как действовать приложению при переходе по адресу /home. Для определения маршрутов нам понадобится AngularJS модуль под названием ngRoute. Для подключения данного модуля следует написать следующий код:

angular.module('myApp', [
    'ngRoute'
])

В модуле ngRoute существует специальная переменная $routeProvider которую следует использовать для конфигурации маршрутов. Мы передадим $routeProvider в метод конфигурации модуля angular.module и определим наши маршруты в функциях обратного действия, как показано ниже:

'use strict';
angular.module('myApp', [
    'ngRoute'
]).
    config(['$routeProvider', function($routeProvider) {
        // Routes will be here
    }]);

Далее открываем файл index.html и удаляем всё связанные с view1 и view2. Так же удаляем всё из тела документа, кроме подключения библиотек и div-а с настройками ngView.

<div ng-view></div>

ngView является компонентом с помощью которого будет осуществляться рендеринг представления в зависимости от маршрута в index.html. Таким образом каждый раз при смене маршрута будет так же меняться и содержание div-а.

Теперь давайте создадим представление (страничку) для входя пользователя в систему. Внутри каталога app создайте папку home. Внутри создайте два файла: home.html и home.js. Откройте файл home.html и вставьте следующий HTML код:

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<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 Up</>
</label>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
</div>
</body></html>

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

Внутри home.js, мы определим маршрут при навигации по которому будет открывать представление home. В объекте $routeProvider есть метод под названием when, который мы задействуем в создании маршрута. При определении нового маршрута мы зададим значение templateUrl, которое будет отражено в index.html. В то же время, мы создадим контроллер для новоиспечённой области видимости ($scope) нашего представления home. В контроллер пишется логика в зависимости от которой отображается то или иное представление. Вот так оно должно выглядеть:

'use strict';
angular.module('myApp.home', ['ngRoute'])
    // Определение маршрута
    .config(['$routeProvider', function($routeProvider) {
        $routeProvider.when('/home', {
            templateUrl: 'home/home.html',
            controller: 'HomeCtrl'
        });
    }])
    // контроллер home
    .controller('HomeCtrl', [function() {
    }]);

Теперь открываем app.js и подключаем модуль myApp.home. Так же определяем какой маршрут будет использоваться по умолчанию с помощью $routeProvider.otherwise.

'use strict';
angular.module('myApp', [
    'ngRoute',
    'myApp.home' // подключаем новый модуль
]).
    config(['$routeProvider', function($routeProvider) {
        // назначаем представление по умолчанию
        $routeProvider.otherwise({
            redirectTo: '/home'
        });
    }]);

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

<script src="home/home.js"></script>

Перезапускаем сервер, отправляемся по адресу http://localhost:8000/app/index.html и видим следующее:

Начало работы с Firebase

Для начала работы с Firebase необходимо зарегистрироваться в данном сервисе. После этого вы получите следующие данные:

Обратите внимание на URL, который был создан для приложения. Далее кликаем на кнопку Manage App. Именно данный URL будет воздействован для работы с Firebase.

Для аутентификации в Firebase будет использоваться email и пароль. Чтобы данный способ сработал, нужно активировать соответствующую опцию в Firebase. Кликнете по вкладке Login & Auth. В открывшемся интерфейсе Email & Password, активируйте настройку Enable Email & Password Authentication:

Добавьте email пользователя и пароль, которые будут участвовать в процессе аутентификации.

Реализация входа пользователя в систему

Для взаимодействия с Firebase, вставьте следующие подключения скриптов в файл app/index.html:

<script src="https://cdn.firebase.com/js/client/1.0.18/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/0.8.0/angularfire.min.js"></script>
<script src="https://cdn.firebase.com/js/simple-login/1.6.2/firebase-simple-login.js"></script>

Далее нам необходимо подключить модуль firebase в файле home.js:

angular.module('myApp.home', ['ngRoute','firebase'])

Теперь мы готовы осуществить совместную работу с Firebase. Открываем home.js и внутри HomeCtrl, создаём новую функцию SignIn для авторизации пользователя. Для создания новой функции воспользуемся объектом $scope. Данный объект относится к модели приложения, и является связующим звеном между контроллером и представлением. Поэтому мы помещаем объект $scope в функцию SignIn, чтобы иметь доступ к представлению.

$scope.SignIn = function($scope) {
    var username = $scope.user.email;
    var password = $scope.user.password;
// логика авторизации
}

Далее внутри HomeCtrl создаём объект для взаимодействия с Firebase:

var firebaseObj = new Firebase("https://blistering-heat-2473.firebaseio.com");

Модуль $firebaseSimpleLogin используется для авторизации в сервисе Firebase, используя email ID и пароля. Передаём объект $firebaseSimpleLogin в HomeCtrl:

.controller('HomeCtrl', ['$scope','$firebaseSimpleLogin',function($scope,$firebaseSimpleLogin) {

Используя firebaseObj, создаём объект $firebaseSimpleLogin:

var loginObj = $firebaseSimpleLogin(firebaseObj);

Теперь, используя $login API, можем авторизоваться в Firebase. loginObj.$login принимает в качестве параметров email и пароль. При успешной проверке будет вызван один колбэк. В обратном случае другой.

$scope.SignIn = function(event) {
    event.preventDefault(); // предотвращаем перезагрузку страницы
    var username = $scope.user.email;
    var password = $scope.user.password;
    loginObj.$login('password', {
        email: username,
        password: password
    })
        .then(function(user) {
            // колбэк запустится при успешной аутентификации аутентификацииSuccess callback
            console.log('Authentication successful');
        }, function(error) {
            // колбэк при неудаче
            console.log('Authentication failure');
        });
}

Для полной реализации работы контроллера, необходимо связать его с представлением. Для этого в AngularJS есть специальная функция ngController. Открываем home.html и добавляем ngController в тело документа.

Для аутентификации пользователя нам необходимо передать имя пользователя и пароль в метод SignIn. Для биндинга (связки) данных в AngularJS есть опция ngModel. Используя её мы сможем передать данные в контроллер:

<body ng-controller="HomeCtrl">
<div class="container">
<div class="jumbotron" style="padding-bottom:0px;">
<h2>AngularJS & Firebase App!</h2>
</div>
<form class="form-signin" role="form">
<input ng-model="user.email" type="email" class="form-control" placeholder="Email address" required="" autofocus="">
<input ng-model="user.password" type="password" class="form-control" placeholder="Password" required="">
<label class="checkbox">
<a href="#"> Sign Up</>
</label>
<button type="button" class="btn btn-lg btn-primary btn-block">SignIn</button>
</form>
</div>
</body>

И наконец прикрепляем ngClick к кнопке авторизации:

<button type="button" ng-click="SignIn($event)" class="btn btn-lg btn-primary btn-block">SignIn</button>

Сохраните все изменения и перезапустите сервер. Зайдите по адресу http://localhost:8000/app/index.html#/home и попробуйте авторизоваться в помощью ID jay3dec@gmail.com и пароля jay. При успешной аутентификации в консоли должно отпечататься сообщение Authentication successful.

Заключение

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

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

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://code.tutsplus.com/tutorials/creating-a-web-app-from-scratch-using-angularjs-and-firebase--cms-22391
Перевел: Станислав Протасевич
Урок создан: 1 Мая 2015
Просмотров: 26489
Правила перепечатки


5 последних уроков рубрики "HTML5"

  • Расширяем возможности HTML за счёт создания собственных тегов

    В этом уроке я покажу процесс создания собственных HTML тегов. Пользовательские теги решают множество задач: HTML документы становятся проще, а строк кода становится меньше.

  • Определение доступности атрибута HTML5 с помощью JavaScript

    Сегодня мы посмотрим, как можно организовать проверку доступности атрибута HTML5 с помощью JavaScript. Проверять будем работу элементов details и summary.

  • HTML5: API работы с вибрацией

    HTML5 - глоток свежего воздуха в современном вебе. Она повлиял не только на классический веб, каким мы знаем его сейчас. HTML5 предоставляет разработчикам ряд API для создания и улучшения сайтов с ориентацией на мобильные устройства. В этой статье мы рассмотрим API для работы с вибрацией.

  • Создание форм с помощью Webix Framework — 4 практических примера

    Веб дизайнеры частенько сталкиваются с необходимостью создания форм. Данная задача не простая, и может вызвать головную боль (особенно если вы делаете что-то не стандартное, к примеру, много-страничную форму). Для упрощения жизни можно воспользоваться фрэймворком. В этой статье я покажу вам несколько практических приёмов для создания форм с помощью фрэймворка Webix.

  • Знакомство с фрэймворком Webix

    В этой статье мы бы хотели познакомить вас с фрэймворком Webix. Для демонстрации возможностей данного инструмента мы создадим интерфейс online аудио плеера. Не обольщайтесь — это всего лишь модель интерфейса. Исходный код доступен в демо и на странице GitHub.

^ Наверх ^