我想在 angular 更新我的产品数量后更新我的视图

I want to update my view after updating my product quantity in angular

我创建了一个 UI,其中显示了产品列表,并有用于更新产品数量的更新按钮(获取和更新方法都会访问我的数据库)。现在我已经成功呈现产品列表和我的更新功能也在工作。问题是视图在更新我的 product.Page 重新加载或 2-3 次点击更新按钮后不显示当前数据需要将我的 view.try 更新为使用像这样的传播运算符 this.productList=[。 ..this.productList,res] 但是显示错误。这是我到目前为止所做的

用于获取产品

productList: any;

  ngOnInit(): void {
 
    this.getProduct();
  }

getProduct() {
    let body = {
      filterBy: 'old',
      searchKey: '',
    };
    this._productSs.getProductList(body).subscribe((res: any) => {
      res.data.forEach((element: any) => {
        Object.assign(element, { count: 0 });
      });
     
      this.productList = res;
   
    });

更新方法

  updateQuantity(count: any, id: any) {
    let body = {
      productId: id,
      quantity: count.toString(),
    };
    let productId = id;
    let quantity = count.toString();
  
    this._productSs.updateQuantity(quantity, productId).subscribe((res) => {
      if (res.message == 'SUCCESS') {
        this.getProduct();
      }
    });
  }

html: <div class="container" *ngFor="let item of productList.data;let i=index">

在更新方法中,我调用 getProduct() 并获取更新后的产品值

问题可能是由于 Object.assign,因为它 returns 在分配计数后更新了对象元素,在您的情况下,它更新了值但返回的对象没有分配回来到元素。

试试这个:

this._productSs.getProductList(body).subscribe((res: any) => {
      res.data.forEach((element: any) => {

        element = Object.assign(element, { count: 0 });

      });

您必须进行一些重构才能使其正常工作:

  • 将 productList 更改为 Observable 并使用异步管道
  • 使用 switchMap 避免在另一个订阅中订阅

这是您可以做的

productList$: Observable<any>;

ngOnInit() {
  this.productList$ = this.getProduct()
}

getProduct() {
  let body = {
   filterBy: 'old',
   searchKey: '',
  };

  return this._productSs.getProductList(body)
   .pipe(
     map((res: any) => {
       res.data.forEach((element: any) => {
         Object.assign(element, { count: 0 });
       });
       return  res
    })
   )
}


updateQuantity(count: any, id: any) {
  let body = {
   productId: id,
   quantity: count.toString(),
  };
  let productId = id;
  let quantity = count.toString();

  this.productList$ =this._productSs.updateQuantity(quantity, productId).pipe(
    switchMap(res => this.getProduct())
  )
}

并在您的模板中

<div class="container" *ngFor="let item of productList$ | async;let i=index">