Angular свойство null во время выполнения - PullRequest
0 голосов
/ 24 января 2020

У меня есть следующие настройки:

export class HomePageComponent implements OnInit {
  constructor(private httpClient: HttpClient) {
  }

 nummer: FormControl = new FormControl("", this.nummerValidator());

  firstname: FormControl = new FormControl("", [Validators.minLength(3)]);
  lastname: FormControl = new FormControl("", [Validators.minLength(3)]);

 formGroup: FormGroup = new FormGroup({
    firstname: this.firstname,
    lastname: this.lastname,
  }, this.formGroupValidator());

 ngOnInit() {
  }

 nummerValidator() {
    return (control: FormControl): { [key: string]: any } | null => {
      if (this.checkEmpty(control.value)) {
        this.enableOnNumber();
        return null;
      }
      this.disableOnNumber();
      if (isNaN(control.value)) {
        return {'forbiddenName': {value: control.value}};
      }
      return null;
    }
  }

 enableOnNumber() {
    this.firstname.enable();
    this.lastname.enable();
  }

  disableOnCardNumber() {
    this.firstname.disable();
    this.lastname.disable();
  }

formGroupValidator() {
    return (control: FormGroup): { [key: string]: any } | null => {
      //someStuffHere
      return errorFound ? {'formGroupError': true} : null;
    }
  }

Когда я запускаю его таким образом и загружаю страницу, я получаю сообщение об ошибке, говорящее, что this.firstname и this.lastname равны нулю в функции enableOnNumber , Обратите внимание, что функция disableOnNumber работает нормально.

Однако, когда я инициализирую nummer FormControl без валидатора и устанавливаю валидатор в функции ngOnInit, все работает. Это почему? Любое объяснение?

Вот как это работает:

nummer: FormControl = new FormControl();
ngOnInit() {
    this.nummer.validator = this.NummerValidator();
  }

1 Ответ

0 голосов
/ 24 января 2020

TypeScript - это типизированный расширенный набор JavaScript, который компилируется в обычный JavaScript, а JavaScript - интерпретируемый язык, а не скомпилированный язык, который интерпретатор в браузере читает по коду JavaScript, интерпретирует каждую строку и запускает его

Метод enableOnNumber() первоначально вызывается при загрузке страницы с помощью nummerValidator(), который связан с проверкой проверки числового элемента управления, и поскольку элемент управления числовой формой объявляется первым, вызывается также его проверка.

Реализуйте это нижеприведенное изменение.

  firstname: FormControl = new FormControl('', [Validators.minLength(3)]);
  lastname: FormControl = new FormControl('', [Validators.minLength(3)]);
  nummer: FormControl = new FormControl('', this.nummerValidator());

Поскольку вы используете элемент управления формы имени и фамилии при проверке номера, лучше сначала объявить этот элемент управления, а затем объявить элемент управления формы номера.

Не уверен используется ли в методе paybackNummerValidator () имя и фамилия или добавлена ​​соответствующая проверка нуля. Поэтому эта ошибка не выдается.

...