Angular: отправка значения объекта с помощью replaysubject - PullRequest
1 голос
/ 26 мая 2020

У меня есть кнопка добавления, на которой я выполняю

onAddProduct(productname,price){
    this.purchasedProduct.push(productname);
    this.totalAmount += price;
    this.matBadgeNumber++;
    this.orderInfo=new OrderInfo(this.matBadgeNumber,this.purchasedProduct,this.totalAmount);
    this.tooltip = "you have "+ this.matBadgeNumber+ " products in cart";
  }

, затем я нажимаю кнопку покупки, которая выполняет

buyNow(){
    this.http.orderDetailEmitter.next(this.orderInfo);
  }

OrderInfo

export class OrderInfo {

  matBadgeNumber: number;
  purchasedProduct: String[];
  totalAmount : Number;

  constructor(matBadgeNumber: number, purchasedProduct: String[],totalAmount : Number ) {
      this.matBadgeNumber = matBadgeNumber;
      this.purchasedProduct = purchasedProduct;
      this.totalAmount = totalAmount;
  }
}

HttpClientService

readonly orderDetailEmitter = new ReplaySubject<OrderInfo>(1);

OrderDetailsComponent

export class OrderDetailsComponent implements OnInit {

  products;
  orderDetails;

  constructor(private http : HttpClientService) {

    this.orderDetails=this.http.orderDetailEmitter;
    console.log("this.orderDetails"+this.orderDetails);
    this.products = Object.values(this.orderDetails);
    console.log("this.products"+this.products);


   }

  ngOnInit(): void {

  }

}

, но пока я печатаю значение orderDetails, он дает мне Object [объект], после использования Oject.values ​​(this.orderDetails) он дает мне некоторые странные значения

false,,false,false,false,,,,true,1,Infinity,nextInfiniteTimeWindow(value) {
        const _events = this._events;
        _events.push(value);
        if (_events.length > this._bufferSize) {
            _events.shift();
        }
        super.next(value);
    }

все, что мне нужно, это получить измененное значение объекта orderInfo через replaysubject

1 Ответ

1 голос
/ 26 мая 2020

http.orderDetailEmitter - наблюдаемое. Вам необходимо подписаться на него, чтобы получить значения. Также, увидев класс OrderInfo, я думаю, вы хотели присвоить список продуктов (свойство purchasedProduct) переменной this.products вместо Object.values(this.orderDetails). Попробуйте следующее

constructor(private http : HttpClientService) {
  this.http.orderDetailEmitter.subscribe(
    details => {
      this.orderDetails = details;
      console.log("this.orderDetails"+this.orderDetails);
      this.products = this.orderDetails.purchasedProduct;
      console.log("this.products"+this.products);
    }
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...