Не удается прочитать свойство 'get' из неопределенного массива - PullRequest
0 голосов
/ 20 апреля 2020

Мне нужно вернуть значение массива по индексу, но после того, как переменная получит индекс, массив ниже возвращает ошибку.

Когда я выбираю, например, «Diminuiu Pouco», мне нужно установить planoCuidadosForm.controls.scorePadraoAlimentar к соответствующему баллу в массиве

компонент:

export class AppComponent  {

    planoCuidadosForm: FormGroup;

    padraoAlimentar: any[] = [
        { Desc: "Mesmo de Sempre", Score: 1 },
        { Desc: "Diminuiu Pouco", Score: 2 },
        { Desc: "Diminuiu Pela Metade", Score: 3 },
        { Desc: "Diminuiu Muito", Score: 4 },
        { Desc: "Quase Nada", Score: 5 }
      ];

    constructor(
        private fb: FormBuilder,
    ) { }

    onInit(){
        this.createFormPlanos();
    }

    createFormPlanos() {
        this.planoCuidadosForm = this.fb.group({
        ProtocoloMedicoId: [null],
        padraoAlimentar: [''],
        scorePadraoAlimentar: 0
        });

    }

    calcScoreNut() {

      if (this.planoCuidadosForm == null) return;

      if (this.planoCuidadosForm.get("padraoAlimentar").value !== null) {
          let x = this.padraoAlimentar.indexOf(this.planoCuidadosForm.get("padraoAlimentar").value).valueOf();
          console.log('Test ', this.padraoAlimentar[x].Score);
          this.planoCuidadosForm.controls.scorePadraoAlimentar.setValue(
          this.padraoAlimentar[x].Score
        );
      }
    }
}

HTML:

<form class="form-horizontal ml-2 mr-2 mt-2" [formGroup]="planoCuidadosForm" >
    <div class="form-row">
        <div class="form-group col-md-6">
            <label for="padraoalimentar">Padrão Alimentar</label>
        </div>
        <div class="form-group col-md-3">
            <select class="form-control" id="padraoalimentar" formControlName="padraoAlimentar" (click)="calcScoreNut()">
                <option value="null"> -- Selecione -- </option>
                <option *ngFor="let pad of padraoAlimentar;let op = index" [value]="pad.Desc">{{ pad.Desc }}</option>
            </select>
        </div>
        <div class="form-group col-md-3">
            <div class="input-group">
                <label for="scorepadraoalimentar">Score:&nbsp;&nbsp;</label>
                <input type="number" formControlName="scorePadraoAlimentar" class="form-control" id="scorepadraoalimentar" [value]="planoCuidadosForm.get('scorePadraoAlimentar').value"
                      [attr.disabled]="true" />
            </div>
        </div>
    </div>
</form>

https://stackblitz.com/edit/angular-vdkwvg

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Я внес изменения ниже, и функция работает.

 calcScoreNut() {


      if (this.planoCuidadosForm == null) return;

      if (this.planoCuidadosForm.get("padraoAlimentar").value !== null) {
          let x = this.padraoAlimentar.find(z => z.Desc == this.planoCuidadosForm.get("padraoAlimentar").value);
          this.planoCuidadosForm.controls.scorePadraoAlimentar.setValue(
          x.Score
        );
      }
    }

https://stackblitz.com/edit/angular-vdkwvg

0 голосов
/ 20 апреля 2020

Ваш app.component должен реализовать OnInit и переименовать ваш метод onInit() в ngOnInit().

export class AppComponent implements OnInit
...