Кнопка отправки больше не отключена в angular5

Я работаю с angular5, у меня есть файл .html, содержащий форму с двумя входными датами типа и текстом типа ввода.

Я реализую условие: если input dateOne больше, чем dateTwo, пользователю появляется ошибка, иначе он может отправить форму.

Все работает хорошо, кнопка отправки отключена, но когда я выбираю dateOne больше, чем dateTwo, появляется сообщение об ошибке, и кнопка больше не отключена.

Кнопка больше не будет отключена, если первый ввод и обе даты не пусты. он не учитывает условие, которое я сделал в функции validation ().

Это файл .html

 <div class = "modal-content">
  <form [formGroup] = "form" (ngSubmit) = "addProjecToClients()" >
  <div class = "modal-header">
    <h4 class = "modal-title">Affectation du projet aux clients</h4>
    <button type = "button" class = "close" (click) = "largeModal.hide()" aria-label = "Close">
      <span aria-hidden = "true">&times;</span>
    </button>
  </div>
  <div class = "modal-body">


    <div class = "form-group row">
      <label class = "col-sm-5 col-form-label">Choisir un client : </label>


      <div class = "col-sm-6">

        <ng-select  *ngIf = "_listClients"
                     [items] = "_listClients"
                      bindLabel  = "nom"
                      bindValue  = "id"
                    [(ngModel)] = "selectedPersonId"
                    formControlName = "selectedPersonId"
        >
        </ng-select>

      </div>
    </div>

    <label class = "col-sm-5 col-form-label">Information liées au contrat : </label>
    <div class = "form-group row">
      <label class = "col-sm-5 col-form-label" >Date One :  </label>
      <div class = "col-sm-6">
        <input type = "date" class = "form-control form-control-sm"
               placeholder = ".form-control-sm"  [(ngModel)] = "dateOne" formControlName = "dateOne">
      </div>
    </div>

    <div class = "form-group row">
      <label class = "col-sm-5 col-form-label">Date Two : </label>
      <div class = "col-sm-6">
        <input type = "date"  [(ngModel)] = "dateTwo" formControlName = "dateTwo"  class = "form-control form-control-sm"
               placeholder = ".form-control-sm">

        <span style = "color:red" *ngIf = "validation()">Date fin doit etre plus grand que date debut .</span>

      </div>
    </div>

  </div>
  <div class = "modal-footer">
    <button type = "button" class = "btn btn-secondary" (click) = "largeModal.hide()">Close</button>
    <button type = "submit" class = "btn btn-primary" [disabled] = "form.invalid">Save changes</button>
  </div>
  </form>
</div><!-- /.modal-content -->

Это файл .ts

export class ProjectsComponent implements OnInit {

  dateOne:new Date() ;
  dateTwo:new Date(); 

  ngOnInit() {      
    this.doSearch();
    this.dateOne= null;
    this.dateTwo= null;

    this.form = this.formBuilder.group({
      dateOne: ['', Validators.required],
      dateTwo: ['', Validators.required],
      selectedPersonId: ['', Validators.required]
    });
  }

  validation(){
    if (this.dateOne && this.dateTwo){
      if (this.dateOne.getTime() < this.dateTwo.getTime()){
        return false;
      }
      else
        return true;
    }

  }

}

Любая идея ?

У вас есть незакрытый div (последний?) Внутри тега form. См. Форматированный блок кода.

Pengyy 31.05.2018 02:34

@Pengyy: Нет, с div нет проблем, это была моя ошибка, когда я пытался пропустить код и редактировать его, теперь вы можете это увидеть :).

dEs12ZER 31.05.2018 02:48

Кнопка «Отправить» только проверяет, действительна ли форма, что верно при вводе обеих дат. Вы должны создать собственный валидатор, чтобы проверить, действительна ли введенная вами дата, означает, что dateOne больше, чем dateTwo. Добавьте пользовательскую проверку в formbuilder или сделайте следующее [disabled] = «form.invalid || !Проверка()" . Извините за опечатку с телефона.

Nitin Walia 31.05.2018 03:42

также вы используете здесь как форму, управляемую шаблоном, так и реактивную форму. Для лучшего понимания форм я предлагаю вам прочитать это сообщение в блоге blog.angular-university.io/…

Nitin Walia 31.05.2018 04:20
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
4
63
0

Другие вопросы по теме