Грешка на ъглова променлива, недефинирана при използване на управлявано от шаблон валидиране

Създавам формуляр, като използвам подход, управляван от шаблон, когато изпратя формуляра, той дава грешка, че всички полета на формуляра са недефинирани във формуляра, има пет полета и използвам функцията за нулиране на формуляра, за да изчистя всички полета във формуляра, аз съм начинаещ в ъглов Не знам как да поправя тази грешка

Грешка

core.js:4197 ERROR TypeError: Cannot read property 'PmId' of undefined
    at PaymentDetailComponent_Template (payment-detail.component.html:3)
    at executeTemplate (core.js:7447)
    at refreshView (core.js:7316)
    at refreshComponent (core.js:8454)
    at refreshChildComponents (core.js:7109)
    at refreshView (core.js:7366)
    at refreshComponent (core.js:8454)
    at refreshChildComponents (core.js:7109)
    at refreshView (core.js:7366)
    at refreshComponent (core.js:8454)

'''Html формуляр'''

<form  #form="ngForm" autocomplete="off" (ngSubmit)="onSubmit(form)">

  <input type="hidden" name="PmId"  [value]="this.service.formData.PmId">

  <div class="form-group">
    <div class="input-group">
      <div class="input-group-prepend">
        <div class="input-group-text bg-white">
          <i class="fas fa-user"></i>
        </div>
      </div>
      <input  name="CardOwnerName" placeholder="CardOwnerName" #CardOwnerName="ngModel" [(ngModel)]="this.service.formData.CardOwnerName" class="form-control" ngModel required>
    </div>
  </div>

  <div class="form-group">
    <div class="input-group">
      <div class="input-group-prepend">
        <div class="input-group-text bg-white">
          <i class="far fa-credit-card"></i>
        </div>
      </div>
      <input  name="CardNumber" placeholder="CardName" #CardNumber="ngModel" [(ngModel)]="this.service.formData.CardNumber" class="form-control" ngModel required >
    </div>
  </div>

  <div class="form-group">
    <div class="input-group">
      <div class="input-group-prepend">
        <div class="input-group-text bg-white">
          <i class="fas fa-calendar-week"></i>
        </div>
      </div>
      <input  name="ExpirationDate" placeholder="MM\YY" #ExpirationDate="ngModel" [(ngModel)]="this.service.formData.ExpirationDate" class="form-control" ngModel required >
    </div>
  </div>

  <div class="form-group">
    <div class="input-group">
      <div class="input-group-prepend">
        <div class="input-group-text bg-white">
          <i class="fas fa-key"></i>
        </div>
      </div>
      <input  type="password" placeholder="CVV" name="CVV" #CVV="ngModel" [(ngModel)]="this.service.formData.CVV" class="form-control" ngModel required >
    </div>
  </div>

  <div class="form-group">
    <button type="submit"  class="btn btn-success btn-lg btn-block"  [disabled]="form.invalid"> <i class="fas fa-database"></i> Submit </button>
  </div>

</form>

'''Component.ts'''

import { Component, OnInit } from '@angular/core';
import { PaymentDetailService } from 'src/app/shared/payment-detail.service';
import { NgForm, NgModel } from '@angular/forms';

@Component({
  selector: 'app-payment-detail',
  templateUrl: './payment-detail.component.html',
  styles: [
  ]
})

export class PaymentDetailComponent implements OnInit {

  constructor(public service: PaymentDetailService)
  {

  }

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


  resetForm(form?:NgForm)
  {
    if(form != null)
    {
      form.resetForm();

      this.service.formData =
      {
        PmId : 0,
        CardOwnerName : '',
        CardNumber : '',
        ExpirationDate : '',
        CVV : '',
      }
    }
  }

  onSubmit(form:NgForm)
  {
    this.service.PostPaymentDetails(form.value).subscribe
    (
      res =>
      {
        this.resetForm(form);
      },
      err =>
      {
        console.log(err);
      }
    )
  }

}

person Jahanzaib Shahid    schedule 07.08.2020    source източник


Отговори (3)


Проверете това

Мисля, че сте пропуснали да декларирате formData в PaymentDetailService. Преди да получите достъп до formData, трябва да го декларирате в PaymentDetailService

Public formData : any;
person Jobelle    schedule 07.08.2020
comment
работи за [стойност], но не работи за [(ngModel)] какво мога да направя за ngModel?? - person Jahanzaib Shahid; 08.08.2020
comment
благодаря ви, сега работи, вмъква данни в базата данни, но не знам защо дава грешка в прозореца на конзолата на chrome. - person Jahanzaib Shahid; 08.08.2020
comment
core.js:4197 ГРЕШКА TypeError: Не може да се зададе свойството „CardOwnerName“ на undefined - person Jahanzaib Shahid; 08.08.2020
comment
Опитайте да инициализирате formData в услуга - person Jobelle; 08.08.2020

Опитайте се да използвате ngModel тук, ‹input type=hidden name=PmId [value]=this.service.formData.PmId› , както сте използвали при други входове като cardOwnerName и т.н.

person Parul    schedule 07.08.2020

Може да получавате formData като „недефиниран“. Моля, опитайте да вмъкнете „?“ като [стойност]=this.service?.formData?.PmId.

person Dipraj Shahane    schedule 08.08.2020