04
Окт
2022

Как правильно вывести BehaviorSubject

У меня есть сервис и два компонента: 1 компонент - шаблон продукта, который вставляется во второй компонент - pageItems; Мне нужно выводить информацию через BehaviorSubject, ибо если информация обновится в бд, то не нужно будет обновлять страницу, чтобы отобразить изменения. Есть проблема, ибо я не могу правильно вывести информацию и реализовать это. Класс CartDb:

export class CartDb{

  item:Items[];

  totalSum:number;

}

Компонент item HTML:

<div *ngFor="let item of itemUser.item>
  <p>{{item.name}}</p>
  <p>{{item.price}}</p>
  <p>{{cart.amount}}</p>
  </div>
  <div>
  <p>{{item.totalSum}}</p>
  </div>

Компонент item:

 @Input()  itemUser:Observable<CartDb>;
  
  ngOnInit(): void {
 
  }

2 Компонент pageItems:

  constructor(private cartService:ShoppingCartService) {
    this.itemUser = this.cartService.items();
  }
@Input()  itemUser:Observable<CartDb>;

  ngOnInit(): void {
    this.cartService
      .getItems();
 
  }

2 Компонент pageItems HTML:

<app-cart 
[itemUser]="itemUser"
>
</app-cart>

Сервис:

items:BehaviorSubject<CartDb> = new BehaviorSubject<CartDb>(undefined!);

  getItems(): void { 

     this.httpClient.get<Users>(`${environment.apiUrl}/User`).pipe(
      mergeMap((id) => this.httpClient
        .get<CartDb>(`${environment.apiUrl}/${this.url}/${id.id}`)
      ))
       .subscribe((id)=>{
      this.items.next(id);
       })
  }

Проблема в том, что в типе данных CartDb, который нужно вывести, items - это массив, а totalSum - одно строка. Первое нужно вывести for, а второе как одну строку. Как это передать через 2 компонент это в шаблон, правильно это всё реализовать? Если слишком бредово объяснил, то попробую потом как-то перефразировать всё.

Источник: https://ru.stackoverflow.com/questions/1453903/%D0%9A%D0%B0%D0%BA-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE-%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8-behaviorsubject

Тебе может это понравится...

Добавить комментарий