Выбранная опция не обновляется после изменения переменной

#angular

#angular

Вопрос:

У меня особая проблема. На странице пользователь может нажать кнопку, чтобы изменить обслуживание. Это сложный объект, который имеет несколько пар <ключ, значение>. Я пытаюсь найти решение, которое автоматически заполняет поля, чтобы пользователю не приходилось снова вводить одни и те же значения и, возможно, вносить нежелательные изменения.

Текущая ситуация

 <!-- Modal -->
<ng-template #dialog2 let-ref2="dialogRef2">
  <nb-card>
    <nb-card-header>Modifica Manutenzione</nb-card-header>
    <nb-card-body>
      <label>Macchinario</label>
      <br>
      <nb-select fullWidth id="machine" name="machine" [(ngModel)]="idmachine">
        <nb-option *ngFor="let machine of machineObject" [value]="machine.idmachine"
        [selected]="selectedMaintenance.idmachine == machine.idmachine">
          {{machine.description}}</nb-option>
      </nb-select>
    </nb-card-body>
    <nb-card-footer>
      <button nbButton status="primary" (click)="modifyMaintenance()">Invia</button>
      <button nbButton status="default" (click)="dialogRef2.close()">Chiudi</button>
    </nb-card-footer>
  </nb-card>
</ng-template>
  

Перед открытием этого модального я должен выполнить эту функцию:

   openDialog2(maintenance): void {
    this.selectedMaintenance = maintenance;
    this.dialogRef2 = this.dialogService.open(this.dialog2);
    this.cdRef.detectChanges();
  }
  

Начальное значение selectedMaintenance равно null. Перед открытием модального я устанавливаю новое значение для переменной. Как я могу заставить Angular обнаружить это изменение, чтобы он автоматически выбирал соответствующий параметр на странице HTML?

Заранее благодарю вас

Ответ №1:

Решение

Решение, которое я нашел, очень простое. Перед открытием модального я присваиваю значения переменным

   openDialog2(maintenance): void {
    this.selectedMaintenance = maintenance;
    this.selectMaintenancesForMachine(this.selectedMaintenance.idmachine);
    this.selectComponentsForMachine(this.selectedMaintenance.idmachine);
    //Assegno le variabili
    this.idmachine = this.selectedMaintenance.idmachine;
    this.machinenumber = this.selectedMaintenance.machinenumber;
    this.dialogRef2 = this.dialogService.open(this.dialog2);
  }