Управление данными¶
Это руководство основано на втором этапе руководства Начало работы с базовым приложением Angular, Добавление навигации. На данном этапе разработки приложение магазина имеет каталог товаров с двумя представлениями: список товаров и подробная информация о товарах.
Пользователи могут нажать на название товара из списка, чтобы увидеть подробности в новом представлении с отдельным URL-адресом или маршрутом.
Этот шаг руководства поможет вам создать корзину для покупок на следующих этапах:
- Обновите представление подробностей о продукте, чтобы включить кнопку Купить, которая добавляет текущий продукт в список продуктов, которыми управляет служба корзины.
- Добавьте компонент корзины, который отображает товары в корзине.
- Добавление компонента доставки, который извлекает цены доставки для товаров в корзине, используя
HttpClient
от Angular для получения данных о доставке из файла.json
.
Создайте сервис корзины¶
В Angular сервис — это экземпляр класса, который вы можете сделать доступным для любой части вашего приложения, используя систему инъекции зависимостей.
В настоящее время пользователи могут просматривать информацию о продукте, а приложение может имитировать обмен информацией и уведомления об изменениях продукта.
Следующим шагом будет создание способа добавления товаров в корзину. В этом разделе мы рассмотрим добавление кнопки Купить и настройку службы корзины для хранения информации о товарах в корзине.
Определение сервиса корзины¶
В этом разделе мы рассмотрим создание CartService
, который отслеживает товары, добавленные в корзину.
1. В терминале создайте новый сервис cart
, выполнив следующую команду:
1 |
|
2. Импортируйте интерфейс Product
из ./products.ts
в файл cart.service.ts
, а в классе CartService
определите свойство items
для хранения массива текущих товаров в корзине.
1 2 3 4 5 6 7 8 9 10 |
|
3. Определите методы для добавления товаров в корзину, возврата товаров из корзины и очистки корзины.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
- Метод
addToCart()
добавляет товар в массивitems
. - Метод
getItems()
собирает товары, которые пользователи добавляют в корзину, и возвращает каждый товар с его количеством. - Метод
clearCart()
возвращает пустой массив товаров, который опустошает корзину.
Использование сервиса корзины¶
В этом разделе рассказывается об использовании CartService
для добавления товара в корзину.
1. В product-details.component.ts
импортируйте сервис корзины.
1 2 3 4 5 |
|
2. Внедрите сервис cart, добавив его в constructor()
.
1 2 3 4 5 6 |
|
3. Определите метод addToCart()
, который добавляет текущий товар в корзину.
1 2 3 4 5 6 7 8 |
|
Метод addToCart()
делает следующее:
- Принимает текущий
продукт
в качестве аргумента. - Использует метод
CartService
addToCart()
для добавления товара в корзину - Выводит сообщение о том, что вы добавили товар в корзину.
4. В product-details.component.html
добавьте кнопку с надписью Купить и привяжите событие click()
к методу addToCart()
.
Этот код обновляет шаблон сведений о продукте с кнопкой Купить, которая добавляет текущий продукт в корзину.
1 2 3 4 5 6 7 8 9 10 |
|
5. Убедитесь, что новая кнопка Купить отображается так, как ожидалось, обновив приложение и нажав на название продукта, чтобы отобразить его подробную информацию.
6. Нажмите кнопку Купить, чтобы добавить товар в сохраненный список товаров в корзине и вывести сообщение с подтверждением.
Создание представления корзины¶
Чтобы клиенты могли видеть свою корзину, вы можете создать представление корзины в два этапа:
- Создайте компонент корзины и настройте маршрутизацию к новому компоненту.
- Отображение элементов корзины.
Настройка компонента корзины¶
Чтобы создать представление корзины, выполните те же шаги, что и при создании компонента ProductDetailsComponent
, и настройте маршрутизацию для нового компонента.
1. Создайте новый компонент с именем cart
в терминале, выполнив следующую команду:
1 |
|
Эта команда сгенерирует файл cart.component.ts
и связанные с ним файлы шаблонов и стилей.
1 2 3 4 5 6 7 8 |
|
2. Обратите внимание, что вновь созданный CartComponent
добавлен в declarations
модуля в app.module.ts
.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
3. Все еще в app.module.ts
добавьте маршрут для компонента CartComponent
, с путем
cart
.
1 2 3 4 5 6 7 8 9 10 11 |
|
4. Обновите кнопку Checkout так, чтобы она маршрутизировалась на URL /cart
.
В top-bar.component.html
добавьте директиву routerLink
, указывающую на /cart
.
1 2 3 |
|
5. Убедитесь, что новый CartComponent
работает как ожидалось, нажав на кнопку Checkout.
Вы можете увидеть текст по умолчанию "Корзина работает!", а URL имеет шаблон https://getting-started.stackblitz.io/cart
, где getting-started.stackblitz.io
может быть другим для вашего проекта StackBlitz.
Отображение товаров в корзине¶
В этом разделе показано, как использовать службу корзины для отображения товаров в корзине.
1. В cart.component.ts
импортируйте CartService
из файла cart.service.ts
.
src/app/cart/cart.component.ts | |
---|---|
1 2 |
|
2. Инжектируйте CartService
, чтобы CartComponent
мог его использовать, добавив его в constructor()
.
src/app/cart/cart.component.ts | |
---|---|
1 2 3 |
|
3. Определите свойство items
для хранения товаров в корзине.
src/app/cart/cart.component.ts | |
---|---|
1 2 3 4 5 |
|
Этот код устанавливает элементы с помощью метода CartService
getItems()
. Вы определили этот метод при создании cart.service.ts
.
4. Обновите шаблон корзины с заголовком и используйте <div>
с *ngFor
для отображения каждого из товаров корзины с его названием и ценой. Полученный шаблон CartComponent
выглядит следующим образом.
src/app/cart/cart.component.html | |
---|---|
1 2 3 4 5 6 |
|
5. Убедитесь, что ваша корзина работает так, как ожидалось:
- Нажмите Мой магазин.
- Нажмите на название товара, чтобы отобразить его подробную информацию.
- Нажмите Купить, чтобы добавить товар в корзину.
- Нажмите Оформить заказ, чтобы просмотреть корзину.
Для получения дополнительной информации о сервисах смотрите Введение в сервисы и инъекцию зависимостей.
Получение цен на доставку¶
Серверы часто возвращают данные в виде потока. Потоки полезны, поскольку они позволяют легко преобразовывать возвращаемые данные и вносить изменения в способ запроса этих данных. Angular HttpClient
— это встроенный способ получения данных из внешних API и предоставления их вашему приложению в виде потока.
В этом разделе показано, как использовать HttpClient
для получения цен на доставку из внешнего файла.
Приложение, которое StackBlitz создает для этого руководства, поставляется с предопределенными данными о доставке в файле assets/shipping.json
. Используйте эти данные для добавления цен доставки для товаров в корзине.
src/assets/shipping.json | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Настройте AppModule
для использования HttpClient
.¶
Чтобы использовать HttpClient
от Angular, вы должны настроить ваше приложение на использование HttpClientModule
.
Angular HttpClientModule
регистрирует провайдеров, необходимых вашему приложению для использования сервиса HttpClient
в вашем приложении.
1. В файле app.module.ts
импортируйте HttpClientModule
из пакета @angular/common/http
в верхней части файла вместе с другими импортами. Поскольку существует ряд других импортов, в данном фрагменте кода они опущены для краткости. Обязательно оставьте существующие импорты на месте.
src/app/app.module.ts | |
---|---|
1 |
|
2. Чтобы глобально зарегистрировать провайдеры Angular HttpClient
, добавьте HttpClientModule
в массив AppModule
@NgModule()
imports
.
src/app/app.module.ts | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Настройте CartService
на использование HttpClient
.¶
Следующим шагом будет внедрение сервиса HttpClient
в ваш сервис, чтобы ваше приложение могло получать данные и взаимодействовать с внешними API и ресурсами.
1. В cart.service.ts
импортируйте HttpClient
из пакета @angular/common/http
.
src/app/cart.service.ts | |
---|---|
1 2 3 |
|
2. Вставьте HttpClient
в конструктор()
сервиса CartService
.
src/app/cart.service.ts | |
---|---|
1 2 3 4 5 6 7 8 9 |
|
Настройте CartService
для получения цен доставки¶
Чтобы получить данные о доставке из файла shipping.json
, вы можете использовать метод HttpClient
get()
.
1. В cart.service.ts
, ниже метода clearCart()
, определите новый метод getShippingPrices()
, который использует метод HttpClient
get()
.
src/app/cart.service.ts | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 |
|
Для получения дополнительной информации о HttpClient
в Angular, смотрите руководство Взаимодействие клиента и сервера.
Создание компонента доставки¶
Теперь, когда вы настроили свое приложение на получение данных о доставке, вы можете создать место для отображения этих данных.
1. Создайте компонент корзины с именем shipping
в терминале, выполнив следующую команду:
1 |
|
Эта команда создаст файл shipping.component.ts
и связанные с ним файлы шаблонов и стилей.
src/app/shipping/shipping.component.ts | |
---|---|
1 2 3 4 5 6 7 8 |
|
2. В app.module.ts
добавьте маршрут для доставки.
Укажите path
shipping
и компонент ShippingComponent
.
src/app/app.module.ts | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
Пока нет ссылки на новый компонент доставки, но вы можете увидеть его шаблон в панели предварительного просмотра, введя URL, указанный в его маршруте.
URL имеет шаблон: https://angular-ynqttp--4200.local.webcontainer.io/shipping
, где часть angular-ynqttp--4200.local.webcontainer.io
может быть другой для вашего проекта StackBlitz.
Настройка ShippingComponent
для использования CartService
.¶
Этот раздел поможет вам модифицировать ShippingComponent
для получения данных о доставке по HTTP из файла shipping.json
.
1. В shipping.component.ts
импортируйте CartService
.
src/app/shipping/shipping.component.ts | |
---|---|
1 2 3 4 |
|
2. Вставьте сервис корзины в ShippingComponent
constructor()
.
src/app/shipping/shipping.component.ts | |
---|---|
1 |
|
3. Определите свойство shippingCosts
, которое устанавливает свойство shippingCosts
с помощью метода getShippingPrices()
из CartService
. Инициализируйте свойство shippingCosts
в методе ngOnInit()
.
src/app/shipping/shipping.component.ts | |
---|---|
1 2 3 4 5 6 7 8 9 |
|
4. Обновите шаблон ShippingComponent
для отображения типов доставки и цен с помощью пайпа async
.
src/app/shipping/shipping.component.html | |
---|---|
1 2 3 4 5 6 7 8 9 |
|
Пайп async
возвращает последнее значение из потока данных и продолжает делать это в течение всего времени существования данного компонента. Когда Angular уничтожает этот компонент, пайп async
автоматически останавливается. Подробную информацию о пайпе async
смотрите в документации AsyncPipe API.
5. Добавьте ссылку из представления CartComponent
на представление ShippingComponent
.
src/app/cart/cart.component.html | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
6. Нажмите кнопку Checkout, чтобы увидеть обновленную корзину. Помните, что изменение приложения приводит к обновлению предварительного просмотра, что опустошает корзину.
Нажмите на ссылку, чтобы перейти к ценам на доставку.
Что дальше¶
Теперь у вас есть приложение магазина с каталогом товаров, корзиной и возможностью поиска цен на доставку.
Чтобы продолжить знакомство с Angular:
- Перейдите к разделу Формы для пользовательского ввода, чтобы завершить приложение, добавив представление корзины и форму оформления заказа.
- Перейдите к Развертывание, чтобы перейти к локальной разработке или развернуть приложение на Firebase или собственном сервере.
28.02.2022