Angular Субъект реактивной формы не обновляет пользовательский интерфейс и не сбрасывает валидаторы - PullRequest
0 голосов
/ 25 мая 2020

Я ввожу адресное поле с 25 символами, так как изначально устанавливаю адрес maxlen на 25 в ngOninit, но при некоторых условиях из другого компонента я ударил объект LenError из службы и попытался изменить maxlen на 19. Теперь форма становится недействительной, поскольку я изменил maxlength от 25 до 19 и адресное поле уже содержит 25 символов. Но когда я щелкаю адресное поле и нажимаю клавишу backspace, я удаляю только один символ, в результате чего получается 24, что делает форму в идеале действительной, она должна быть недействительной, поскольку я установил maxlen на 19.

Я не могу получить то, что неправильно в моем коде. Пожалуйста, помогите.

// LenError Subject Subscribe call inside Oninit
this.service.LenError.subscribe(error => this.setValidation() );

// Form Group
this.maxLen = 25;
this.Form = this.fb.group({
      address: ['', [Validators.required,
      Validators.pattern('^[ a-zA-Z0-9-_!@&*)(+=|/<>?,:;."\\\']+$'),
      Validators.maxLength(this.maxLen)]],
    });


// setValidation Function
setValidation() {
    setTimeout(() => {
      const Ele = this.el.nativeElement.querySelector('#address');
      const EleControl = this.Form.get('address');
      this.maxLen = 19;
      EleControl.clearValidators();
      EleControl.setValidators([Validators.required,
      Validators.pattern('^[ a-zA-Z0-9-_!@&*)(+=|/<>?,:;."\\\']+$'),
      Validators.maxLength(this.dbaNameMaxLen)]);
      EleControl.updateValueAndValidity();
      Ele.focus();
      Ele.maxLength = this.maxLen;
      this.chck = true;
    });
  }
...