Статьи

Создание простой корзины покупок с помощью AngularJS: Часть 1

В этой серии статей мы увидим, как создать простую корзину для покупок с помощью AngularJS . Эта серия учебных пособий будет посвящена использованию директив AngularJS . Директивы AngularJS являются основной частью AngularJS и придают HTML особый характер. Из официальных документов:

На высоком уровне директивы являются маркерами элемента DOM (например, атрибута, имени элемента, комментария или класса CSS), которые сообщают HTML-компилятору AngularJS ( $compile ) присоединить указанное поведение к этому элементу DOM или даже преобразовать элемент DOM и его дети.

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

Создайте страницу с именем index.html . Загрузите и включите файлы Bootstrap в index.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
<!DOCTYPE html>
<html lang=»en»>
 
<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 Shop Cart</title>
 
    <!— Bootstrap core CSS —>
    <link rel=»stylesheet» href=»https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css»>
    <script src=»https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js»></script>
    <script src=»https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js»></script>
 
    <style>
        body {
            padding-top: 50px;
        }
        #divTotal{
            background-color: green;
        }
        .affix{
            right: 0px;
        }
        .affix-top{
            right: 0px;
            position: fixed;
        }
    </style>
 
</head>
 
<body>
 
    <div class=»container»>
 
 
    </div>
 
</body>
 
</html>

Внутри .row div создайте .row div.

1
2
3
<div class=»row»>
   
</div>

На странице index.html у нас будет два столбца. Один будет иметь список товаров с ценами, а другой столбец будет иметь Total дивиденд. Итак, давайте создадим две колонки.

1
2
3
4
5
6
7
<div class=»col-xs-7 col-md-8 col-sm-8 col-lg-8″>
 
</div>
 
<div class=»col-xs-5 col-md-4 col-sm-4 col-lg-4″>
     
</div>

Теперь в первом столбце давайте добавим несколько пунктов и опций.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<div class=»panel panel-primary»>
    <div class=»panel-heading»>
        <h3 class=»panel-title»>Panel title</h3>
    </div>
    <div class=»panel-body»>
        <div class=»radio»>
            <label>
                <input type=»radio» name=»optradio»>Option 1</label>
        </div>
        <div class=»radio»>
            <label>
                <input type=»radio» name=»optradio»>Option 1</label>
        </div>
        <div class=»radio»>
            <label>
                <input type=»radio» name=»optradio»>Option 1</label>
        </div>
    </div>
</div>

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

01
02
03
04
05
06
07
08
09
10
11
12
13
<div class=»panel panel-primary»>
    <div id=»divTotal» class=»panel-heading»>
        <h3 class=»panel-title»>Total</h3>
    </div>
    <div class=»panel-body»>
        <h2>Rs.
    </div>
</div>
 
<div class=»text-center»>
    <a href=»#/checkout» class=»btn btn-danger»>Checkout <span class=»glyphicon glyphicon-shopping-cart» aria-hidden=»true»>
    </a>
</div>

Сохраните изменения и просмотрите index.html . Это должно выглядеть так:

Простая корзина

Выглядит хорошо. Но одну вещь, которую нам нужно исправить, это сделать Total div фиксированным, чтобы он не двигался при прокрутке браузера. Чтобы это исправить, мы будем использовать JavaScript-компонент Bootstrap Affix .

Сначала убедитесь, что вы включили файл Bootstrap JavaScript. Чтобы добавить поведение аффикса, просто добавьте атрибут data-spy="affix" в Total div. При желании мы также можем указать позицию, которую мы хотим прикрепить, поэтому давайте удержим ее на определенной высоте сверху, добавив data-offset-top="20" . Теперь, если вы просматриваете index.html и пытаетесь прокрутить браузер вниз, общая сумма остается наверху и всегда видна.

При создании нашего приложения AngularJS мы будем использовать директиву ngView для переключения представлений. Поэтому нам нужно запустить приложение AngularJS с помощью сервера. Следовательно, мы будем использовать сервер Node.js.

Начнем с создания каталога для нашего проекта под названием ShoppingCart . Внутри ShoppingCart создайте файл с именем server.js . Мы будем использовать Express , среду веб-приложений NodeJS, для визуализации страниц. Так что установите express используя npm .

1
npm install express

После того, как Express успешно установлен, откройте server.js, потребуйте Express и создайте приложение.

1
2
3
4
5
‘use strict’
 
var express = require(‘express’);
 
var app = express();

Мы будем хранить наши файлы AngularJS в отдельной папке, которая называется public . Создайте папку с именем public . Внутри server.js определяют server.js /public и /node_modules .

1
2
app.use(‘/public’, express.static(__dirname + ‘/public’));
app.use(‘/node_modules’, express.static(__dirname + ‘/node_modules’));

Затем свяжите приложение с адресом локального порта.

1
2
3
app.listen(‘3000’,function(){
    console.log(‘Server running at http://localhost:3000 !!’)
})

Теперь запустите сервер Node.js, и вы должны получить сообщение о запуске сервера в терминале.

1
node server.js

Но если вы попытаетесь просмотреть http: // localhost: 3000 , отобразится ошибка Cannot GET / поскольку мы еще не определили маршруты.

Внутри public каталога создайте страницу с именем main.html . Это будет служить нашим корневым файлом шаблона. Просто скопируйте страницу index.html которую мы ранее создали, в main.html . Из main.html удалите содержимое внутри тела.

Загрузите AngularJS и main.html его в main.html . Добавьте директиву ngApp вверху тега HTML.

1
<html lang=»en» ng-app=»shoppingCart»>

Внутри тела main.html добавьте div с помощью директивы ngView . После внесения всех вышеперечисленных изменений, вот как выглядит main.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
<!DOCTYPE html>
<html lang=»en» ng-app=»shoppingCart»>
 
<head>
 
    <title>Bootstrap Shop Cart</title>
 
 
    <link rel=»stylesheet» href=»https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css»>
    <script src=»https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js»></script>
    <script src=»https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js»></script>
 
    <style type=»text/css»>
        body {
            padding-top: 50px;
        }
         
        #divTotal {
            background-color: green;
        }
         
        .affix {
            right: 0px;
        }
         
        .affix-top {
            right: 0px;
            position: fixed;
        }
         
        .scroll-debug {
            position: fixed;
            bottom: 10px;
            right: 10px;
        }
    </style>
 
 
</head>
 
<body>
 
    <div ng-view></div>
    <script type=»text/javascript» src=»public/script/angular.js»></script>
 
</body>
 
</html>

Теперь давайте определим нашу страницу по умолчанию для отображения при запуске сервера узла. Откройте ShoppingCart/server.js и добавьте следующий маршрут приложения для перенаправления на страницу main.html .

1
2
3
app.get(‘/’,function(req,res){
    res.sendFile(‘main.html’,{‘root’:__dirname + ‘/public’});
})

Сохраните изменения и перезапустите сервер узла. Укажите в браузере http: // localhost: 3000, и вы сможете просматривать пустую страницу, в отличие от того, когда мы в прошлый раз имели ошибку на этом маршруте.

Теперь давайте интегрируем дизайн корзины покупок в приложение AngularJS. Внутри public каталога создайте еще одну папку с именем cart . Внутри cart создайте два файла, cart.html и cart.js С нашей страницы дизайна Bootstrap под названием index.html скопируйте содержимое внутри тела и вставьте в cart.html .

Нам потребуется ngRoute , поэтому установите его, используя npm .

1
npm install angular-route

После установки добавьте ссылку на angular-route в main.html .

1
<script type=»text/javascript» src=»node_modules/angular-route/angular-route.js»></script>

Откройте cart.js и определите модуль cart .

1
angular.module(‘cart’, [‘ngRoute’])

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

1
2
3
4
5
6
.config([‘$routeProvider’, function($routeProvider) {
  $routeProvider.when(‘/cart’, {
    templateUrl: ‘public/cart/cart.html’,
    controller: ‘CartCtrl’
  });
}])

Используя модуль ngRoute , мы определили маршрут /cart с соответствующим шаблоном и контроллером. Также определите контроллер cart.js внутри cart.js Вот как выглядит cart.js :

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

Нам также понадобится корневой файл для внедрения всех модулей в наше приложение AngularJS. Поэтому внутри public каталога создайте файл с именем app.js Этот файл будет служить корневым файлом для приложения AngularJS. Создайте новый модуль shoppingCart внутри app.js и app.js в него модуль корзины.

1
2
3
4
angular.module(‘shoppingCart’, [
    ‘ngRoute’,
    ‘cart’
]).

Определите маршрут по умолчанию для приложения AngularJS в /cart внутри app.js

01
02
03
04
05
06
07
08
09
10
11
12
‘use strict’;
 
 
angular.module(‘shoppingCart’, [
    ‘ngRoute’,
    ‘cart’
]).
config([‘$routeProvider’, function($routeProvider) {
    $routeProvider.otherwise({
        redirectTo: ‘/cart’
    });
}]);

Добавьте ссылку на cart.js и app.js на странице main.html .

1
2
<script src=»public/cart/cart.js»></script>
<script src=»public/app.js»></script>

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

Страница корзины внутри приложения AngularJS

Теперь, если вы прокрутите страницу вниз, Total div не останется неизменным. Запомните эту проблему — мы исправим ее позже в этой серии.

Внутри публичного каталога создайте папку с именем checkout . Внутри папки checkout создайте два файла с checkout.html и checkout.js . Откройте checkout.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
<div class=»container»>
    <div class=»well»>
        <div class=»page-header»>
            <h3>Quotation</h3>
        </div>
 
        <table class=»table»>
            <tr>
                <td>
                    CPU
                </td>
                <td>
                    Rs.
                </td>
            </tr>
            <tr>
                <td>
                    Hard Disk
                </td>
                <td>
                    Rs.
                </td>
            </tr>
            <tr>
                <td>
                    <b>Total:</b>
                </td>
                <td>
                    <b>Rs.
                </td>
            </tr>
        </table>
 
 
    </div>
    <div class=»text-left»>
        <a type=»button» class=»btn btn-danger» href=»#/cart»>Customize <span class=»glyphicon glyphicon-pencil» aria-hidden=»true»>
 
    </div>
</div>

Откройте checkout.js и создайте модуль checkout заказа. ngRoute модуль ngRoute и определите шаблон по умолчанию и его логику контроллера. Вот как выглядит checkout.js :

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

Включите ссылку на checkout.js в файле main.html .

1
<script src=»public/checkout/checkout.js»></script>

app.js checkout модуля в app.js чтобы приложение shoppingCart AngularJS знало об этом модуле.

1
2
3
4
5
angular.module(‘shoppingCart’, [
    ‘ngRoute’,
    ‘cart’,
    ‘checkout’
]).

Сохраните изменения и перезапустите сервер. В браузере укажите http: // localhost: 3000 / # / checkout, и вы сможете увидеть страницу оформления заказа.

Страница оформления покупки в корзине

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

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