Я создаю приложение, в котором пользователь добавляет элемент в корзину, а затем отслеживает эти элементы в локальном хранилище. Когда пользователь нажимает кнопку «Добавить» в одном компоненте, мне нужно, чтобы панель навигации обновлялась с количеством элементов в реальном времени, но я не могу использовать Event Emitter с тем, как настроено мое приложение.
Функциональность, которую я ищу, проста: когда я добавляю элемент и он помещается в локальное хранилище, число в моей панели навигации рядом с логотипом корзины покупок должно увеличиться на 1. Я знаю, что это можно сделать с помощью Observables и Темы, мне просто трудно понять это. Я переместил код из компонента в службу, чтобы начать, потому что я думаю, что это позволит обоим компонентам взаимодействовать с ним. Я могу добавить элементы в локальное хранилище должным образом, используя службу, но я застрял после этого, когда мне нужно отслеживать количество элементов, добавленных с помощью службы.
Вот услуга:
@Injectable({
providedIn: 'root'
})
export class MenuService {
public apiRoot: string = `http://localhost:3000`;
orders;
constructor(private http: HttpClient) { }
order(id, name, options, price) {
//confirm the order is correct
const orderConfirmed = confirm("Add this item to your cart?");
if (orderConfirmed) {
let order = new Order(id, name, options, price)
//get and set any existing orders from local storage or set to a blank array if there are none
this.orders = localStorage.getItem('order') ? JSON.parse(localStorage.getItem('order')) : [];
//push to our orders array
this.orders.push(order)
//store in localStorage
localStorage.setItem('order', JSON.stringify(this.orders))
}
}
Тогда вот мой navbar.ts:
export class NavbarComponent implements OnInit {
itemsInCart;
constructor() { }
getItemsInCart() {
this.itemsInCart = JSON.parse(localStorage.getItem('order'))
}
ngOnInit() {
this.getItemsInCart();
}
}
Прямо сейчас я просто извлекаю элементы прямо из локального хранилища и отображаю их, но, очевидно, это не сработает в режиме реального времени, если я добавлю другие элементы, в основном я хочу создать компонент navbar, который находится над router-outlet, чтобы иметь возможность подписаться на свойство this.orders
в MenuService
, чтобы я мог отслеживать длину this.orders
в режиме реального времени, когда пользователь добавляет товары в корзину. Извините, если это кажется очевидным, все еще учусь!