javascript - Angular renderar inte om vyn efter att relaterat modellvärde ändrats


Jag gör en enkel Angular-app. Jag har 2 modeller nedan

class Customer implements ICustomer
{
    id?: number | null | undefined;
    name: string | null;
    addr: string | null;
    tel: string | null;
    postCode: string | null;
    defaultBrand: number | null;
    defaultLogistic: number | null;
    createdOn: string | null;
    updatedOn: string | null;
}

och

class Brand implements IBrand {

  id?: number | undefined;
  name: string = "";
  shortName: string = "";
  imgPath: string = "";
  isEnable?: boolean | undefined = false;
  createdOn: string = "";
  updatedOn: string = "";
}

Så relationen är att Kunden har 1 märke (lagra som märke-id)

sedan i kundhanteringsvyn har jag en tabell som visar varumärkets namn och jag använder ngBootstrap-modal för uppdateringsvyn

Så, problemet är att efter att jag uppdaterade märket på modalet upptäckte jag att kundtabellen inte uppdaterades, den har fortfarande det tidigare värdet. Hur korrigerar jag detta värde?

Här är några av mina customer-row.component.ts

  ngOnInit(): void {
    this.setBrand();
    this.setLogistic();
  }

  setBrand(): void {
    this.brand = this.brandService.brandList.find(x => x.id === this.item.defaultBrand);
  }

  setLogistic(): void {
    this.logistic = this.logisticService.LogicticList.find(x => x.id === this.item.defaultLogistic);
  }

  onEditClick(): void {
    this.modalRef = this.modal.open(CustomerModalUpdateComponent, {
      animation: true,
      size: 'xl',
      backdrop: 'static'
    });
    this.modalRef.componentInstance.title = `${this.item.name}`;
    this.modalRef.componentInstance.item = this.item;
    this.modalRef.closed.subscribe((result:any) => {
      this.setBrand();
      this.setLogistic();
      this.changeDetectRef.detectChanges();
    });
  }

och här är några av mina customer-row.component.html

 <td class="text-center">
    {{ this.brand?.name }}
  </td>
  <td class="text-center">
    {{ this.logistic?.name }}
  </td>

Svar #1

Detta kanske inte löser problemet, men försök att tilldela variablerna till nya platser i minnet så att ändringsdetektering sker.

Prova detta:

setBrand(): void {
    this.brand = { ...this.brandService.brandList.find(x => x.id === this.item.defaultBrand) };
  }

  setLogistic(): void {
    this.logistic = { ...this.logisticService.LogicticList.find(x => x.id === this.item.defaultLogistic) };
  }

Svar #2

Jag löser problemet genom att implementera ngOnChanges-koden nedan

  ngOnChanges(changes: SimpleChanges): void {
    this.setBrand();
    this.setLogistic();
  }

Jag är inte säker på att detta är ett korrekt sätt, men det kan lösa mitt problem