Статьи

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

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

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

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

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

1
2
cd AngularJS_Firebase_Part3
npm install

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

1
npm start

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

Нам нужна страница, с которой пользователь может создавать и публиковать сообщения в блоге. Давайте добавим необходимые шаблоны и файлы для создания страницы «Добавить сообщение».

Перейдите в каталог AngularJS_Firebase_Part3/app и создайте папку с именем addPost . Внутри addPost создайте файл HTML с addPost.html и addPost.js . В addPost.html добавьте следующий 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<html lang=»en»>
 
<head>
 
    <title></title>
 
    <link href=»http://getbootstrap.com/dist/css/bootstrap.min.css» rel=»stylesheet»>
 
    <link href=»blog.css» rel=»stylesheet»>
 
 
</head>
 
<body>
 
    <div class=»blog-masthead»>
        <div class=»container»>
            <nav class=»blog-nav»>
                <a class=»blog-nav-item » href=»#»>Home</a>
                <a class=»blog-nav-item active» href=»addPost.html»>Add Post</a>
 
            </nav>
        </div>
    </div>
 
    <div class=»container»>
 
        <form class=»form-horizontal»>
            <fieldset>
 
                <!— Form Name —>
                <legend>Create Post</legend>
 
                <!— Text input—>
                <div class=»form-group»>
                    <label class=»col-md-4 control-label» for=»txtTitle»>Title</label>
                    <div class=»col-md-4″>
                        <input id=»txtTitle» name=»txtTitle» type=»text» placeholder=»placeholder» class=»form-control input-md»>
 
                    </div>
                </div>
 
                <!— Textarea —>
                <div class=»form-group»>
                    <label class=»col-md-4 control-label» for=»txtPost»>Post</label>
                    <div class=»col-md-4″>
                        <textarea class=»form-control» id=»txtPost» name=»txtPost»></textarea>
                    </div>
                </div>
 
                <!— Button —>
                <div class=»form-group»>
                    <label class=»col-md-4 control-label» for=»singlebutton»></label>
                    <div class=»col-md-4″>
                        <input id=»singlebutton» name=»singlebutton» class=»btn btn-primary» type=»submit» value=»Publish» />
                    </div>
                </div>
 
            </fieldset>
        </form>
 
 
    </div>
    <!— /.container —>
 
    <div class=»blog-footer»>
        <p>AngularJS & Firebase Blog App</p>
 
    </div>
 
 
 
</body>
 
</html>

Внутри addPost.js мы определим маршруты для представления Add Post. $routeProvider есть метод с именем when , который мы будем использовать для создания маршрута для нашего представления addPost . Мы установим templateUrl который будет отображаться в index.html . Мы также установим controller (логику, управляющую представлением) для вновь созданной области $scope addPost представления addPost . Вот как выглядит addPost.js :

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

Включите модуль app.js в app.js

1
2
3
4
5
6
7
angular.module(‘myApp’, [
    ‘ngRoute’,
    ‘myApp.home’,
    ‘myApp.register’,
    ‘myApp.welcome’,
    ‘myApp.addPost’ // Newly added module
])

Кроме того, добавьте ссылку на addPost.js на странице app/index.html .

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

Сохраните изменения, перезапустите сервер и укажите в браузере адрес http: // localhost: 8000 / app / # / addPost, и вы увидите страницу добавления поста.

Добавить страницу публикации приложения AngularJS Firebase

Во-первых, нам нужно добавить директиву ngModel в текстовое поле ввода и текстовую область на странице добавления записи, чтобы включить two-way data binding .

1
2
3
<input id=»txtTitle» name=»txtTitle» ng-model=»article.title» type=»text» placeholder=»placeholder» class=»form-control input-md»>
 
<textarea class=»form-control» id=»txtPost» ng-model=»article.post» name=»txtPost» ></textarea>

Когда пользователь публикует сообщение в блоге, оно должно иметь заголовок и сообщение. Поэтому мы добавим проверку, чтобы проверить, есть ли в блоге пост и заголовок. Если заголовок и сообщение предоставлены, мы включим кнопку публикации, и пользователь сможет опубликовать свой пост в блоге. Мы будем использовать директиву ngDisabled, чтобы отключить кнопку публикации. Добавьте директиву ngDisabled к кнопке публикации, как показано.

1
<input id=»singlebutton» ng-disabled=»!article.title || !article.post» name=»singlebutton» class=»btn btn-primary» type=»submit» value=»Publish» />

Как видно из приведенного выше кода, ngDisabled отключит кнопку публикации, если заголовок или пост статьи не предоставлены.

Далее мы сохраним заголовок и публикацию статьи в Firebase когда пользователь нажмет кнопку публикации. Чтобы сохранить данные в Firebase, мы будем использовать API $ push .

Добавьте директиву ngController в тело addPost.html а также добавьте директиву ngSubmit к форме в addPost.html .

1
<body ng-controller=»AddPostCtrl»>
1
<form class=»form-horizontal» ng-submit=»AddPost()»>

Откройте addPost.js и добавьте новую функцию AddPost в контроллере AddPostCtrl как показано ниже:

1
2
3
4
5
6
7
.controller(‘AddPostCtrl’, [‘$scope’, function($scope) {
    $scope.AddPost = function() {
         
      // Add Post logic will be here
 
    }
}]);

Нам понадобится $firebase для передачи данных в Firebase Db, поэтому AddPostCtrl модуль $firebase AddPostCtrl контроллер AddPostCtrl .

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

Создайте объект Firebase, используя ваш URL Firebase.

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

Используя firebaseObj мы создадим экземпляр $firebase который мы будем использовать для передачи данных в Firebase.

1
var fb = $firebase(firebaseObj);

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

1
2
var title = $scope.article.title;
var post = $scope.article.post;

Поскольку у нас есть заголовок и сообщение, мы будем вызывать API-интерфейс толчка Firebase для сохранения данных в Firebase.

1
2
3
4
5
6
7
8
fb.$push({
    title: title,
    post: post
}).then(function(ref) {
    console.log(ref);
}, function(error) {
    console.log(«Error:», error);
});

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

Добавить данные публикации в Firebase

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

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