Статьи

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

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

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

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

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

1
2
cd AngularJS_Firebase_Part4
npm install

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

1
npm start

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

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

Войдите в Firebase и перейдите в Управление приложениями . Вы должны увидеть Firebase URL на экране панели инструментов, как показано ниже:

Экран панели инструментов Firebase

Нажмите на значок «плюс» рядом с URL-адресом и создайте подузел « Articles со значением 0 и нажмите « Добавить» . После добавления подузла у вас должно получиться что-то вроде:

Firebase Dashoboard с подузлом Статьи

Как вы можете видеть, мы Articles данные по Articles отдельные категории, чтобы было легко запрашивать и извлекать данные.

Теперь перейдите к addPost.js и измените URL-адрес Firebase на https://blistering-heat-2473.firebaseio.com/Articles . Давайте также добавим идентификатор электронной почты пользователя, связанный с сообщением в блоге. Мы можем получить идентификатор электронной почты от сервиса CommonProp который мы написали ранее. Просто CommonProp службу AddPostCtrl контроллер AddPostCtrl .

1
.controller(‘AddPostCtrl’, [‘$scope’,’$firebase’,’CommonProp’,function($scope,$firebase,CommonProp) {

При отправке данных также включите параметр идентификатора электронной почты. Вот модифицированная функция AddPost :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
$scope.AddPost = function() {
    var title = $scope.article.title;
    var post = $scope.article.post;
 
    var firebaseObj = new Firebase(«https://blistering-heat-2473.firebaseio.com/Articles»);
    var fb = $firebase(firebaseObj);
 
    fb.$push({
        title: title,
        post: post,
        emailId: CommonProp.getUser()
    }).then(function(ref) {
        console.log(ref);
    }, function(error) {
        console.log(«Error:», error);
    });
 
}

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

Firebase Структура данных

Далее, давайте добавим компонент группы Bootstrap list, чтобы показать сообщения, созданные пользователем. Перейдите в app/welcome/welcome.html и внутри div с container класса, после приветственного сообщения добавьте компонент группы списка, как показано:

1
2
3
4
5
6
<div class=»list-group»>
    <a href=»#» class=»list-group-item active»>
        <h4 class=»list-group-item-heading»>Title Heading</h4>
        <p class=»list-group-item-text»>Blog post content </p>
    </a>
</div>

Сохраните изменения и перезапустите сервер. Попробуйте войти с действительным адресом электронной почты и паролем. На странице приветствия вы должны увидеть что-то вроде:

Страница приветствия с фиктивной записью в блоге

Далее, давайте запросим данные из Firebase, используя URL https://blistering-heat-2473.firebaseio.com/Articles .

Откройте welcome.js , и внутри контроллера WelcomeCtrl создайте объект Firebase, используя указанный выше URL.

1
var firebaseObj = new Firebase(«https://blistering-heat-2473.firebaseio.com/Articles»);

Мы будем использовать $firebase для получения данных из Firebase. Согласно официальным документам:

$firebase используется для синхронизации данных Firebase с приложениями Angular. Он содержит несколько вспомогательных методов для записи данных в Firebase, а также инструменты для чтения данных в синхронизированные коллекции или объекты.

1
var sync = $firebase(firebaseObj);

Чтобы получить данные из URL-адреса Firebase в виде синхронизированного массива, AngularFire предоставляет метод с именем $ asArray . Давайте $asArray метод $asArray для объекта синхронизации и назначим его другой переменной $scope .

1
$scope.articles = sync.$asArray();

Также добавьте элемент абзаца на странице приветствия, как показано ниже:

1
<p>{{articles}}</p>

Сохраните все изменения и перезапустите сервер. Войдите с действительным адресом электронной почты и паролем. Попав на страницу приветствия, вы должны получить результат запроса в виде данных JSON в $scope.articles привязки $scope.articles .

1
2
3
4
5
6
7
8
9
[{
    «emailId»: «[email protected]»,
    «post»: «This is my first post on this platform.»,
    «title»: «Hello !!»
}, {
    «emailId»: «[email protected]»,
    «post»: «Good night for tonight»,
    «title»: «GoodBye»
}]

Поскольку данные запрашиваются из Firebase в переменной $scope.articles , мы можем привязать данные к нашему элементу списка страниц приветствия. Мы будем использовать директиву AngularJS ngRepeat, чтобы повторять данные в группе списка Bootstrap. Вот список групп HTML:

1
2
3
4
5
6
<div class=»list-group»>
    <a href=»#» class=»list-group-item active»>
        <h4 class=»list-group-item-heading»>Title Heading</h4>
        <p class=»list-group-item-text»>Blog post content </p>
    </a>
</div>

Добавьте директиву ngRepeat как показано в главном div.

1
ng-repeat=»article in articles»

Директива ngRepeat перебирает переменную ngRepeat и создает HTML внутри div группы list для каждого элемента. Итак, измените показанный HTML-код:

1
2
3
4
5
6
<div class=»list-group» ng-repeat=»article in articles»>
    <a href=»#» class=»list-group-item active»>
        <h4 class=»list-group-item-heading»>{{article.title}}</h4>
        <p class=»list-group-item-text»>{{article.post}}</p>
    </a>
</div>

Сохраните изменения и перезапустите сервер. Войдите, используя адрес электронной почты и пароль, и однажды на странице приветствия вы увидите список статей, добавленных на странице «Добавить сообщение».

Страница приветствия с постом из Firebase

Теперь перейдите по адресу http: // localhost: 8000 / app / # / addPost и добавьте еще один пост. Поскольку мы еще не добавили перенаправление на страницу приветствия после создания сообщения, перейдите вручную по адресу http: // localhost: 8000 / app / # / welcome и вы должны увидеть его в списке.

Как только сообщение будет добавлено, нам нужно перенаправить пользователя на страницу приветствия. Откройте app/addPost/addPost.js и введите $location в контроллере AddPostCtrl . На fb.$push success добавьте перенаправление на страницу welcome .

01
02
03
04
05
06
07
08
09
10
fb.$push({
    title: title,
    post: post,
    emailId: CommonProp.getUser()
}).then(function(ref) {
    console.log(ref);
    $location.path(‘/welcome’);
}, function(error) {
    console.log(«Error:», error);
});

Откройте app/welcome/welcome.html и измените ссылку «Добавить сообщение», чтобы перенаправить на страницу «Добавить сообщение», как показано ниже:

1
<a class=»blog-nav-item » href=»#/addPost»>Add Post</a>

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

В этом уроке мы увидели, как запрашивать данные, хранящиеся в Firebase, используя AngularFire. Мы создали интерфейс для отображения сообщения блога, созданного пользователем, в виде списка на странице приветствия. Мы также исправили несколько небольших проблем.

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

Исходный код из этого урока доступен на GitHub . Дайте нам знать ваши мысли в комментариях ниже!