Количество корзины в общем компоненте заголовка не обновляется из другого компонента в Angular 10

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

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

Мой файл cart.service.ts:

export class CartService {
  public cartItem: ICartItem[] = [];
  cartItems = new BehaviorSubject<ICartItem[]>(this.cartItem);
  cartItems$ = this.cartItems.asObservable();

  constructor(private cookieService: CookieService) {
    this.GetCartData()
  }

  GetCartData() {
    if (this.cookieService.check('cartItems')) {
      this.cartItem = JSON.parse(this.cookieService.get('cartItems'));
    } else {
      this.cartItem = [];
    }
    this.cartItems.next(this.cartItem);
  }

  publishCartChange() {
    this.cartItem = JSON.parse(this.cookieService.get('cartItems'));
    this.cartItems.next(this.cartItem);
  }

  AddCartItem(item: ICartItem) {
    this.cartItem.push(item);
    this.cookieService.set('cartItems', JSON.stringify(this.cartItem));
    this.cartItems.next(this.cartItem);
  }
}

Как я получаю доступ к компоненту заголовка:

this.cartService.publishCartChange();
    this.cartItemSub = this.cartService.cartItems$.subscribe(res => {
      console.info(res);
      this.cartItems = res;
      console.info(res);
      this.cartQty = this.cartItems.length;
    }); 

Вот что делает моя кнопка «Добавить в корзину»:

addtoCart() {
    let cartItem: ICartItem = {'ItemId': this.product['itemId'], 'ItemName': this.product['itemName'], price: this.product['specialPrice'], 'qty': this.qty, 'amount': this.product['specialPrice']* this.qty };
    this.cartService.AddCartItem(cartItem);
  }
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
521
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы добавили атрибут для внедрения и указали, что он должен быть зарегистрирован в корневом инжекторе? Это сделает его синглтоном для всего приложения, что, вероятно, вам и нужно.

Обязательно удалите его из массива providers из любого NgModule/Component, если вы зарегистрировали его через модуль/компонент.

@Injectable({ providedIn: 'root' })
export class CartService {
 ...
}

Я знал об этом, но он показывал мне результат при обновлении, поэтому меня это меньше беспокоило.

Jay 11.12.2020 17:14

Другие вопросы по теме