Как сделать определенные поля ввода обязательными, только когда выбран соответствующий переключатель - PullRequest
0 голосов
/ 17 сентября 2018

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

Мне нужно, как проверить переключатель и, соответственно, сделать необходимые поля ввода чисел. перепробовал много способов и видов, если * ngIf, но я не могу получить правильную форму

спасибо заранее см. Здесь

<form (ngSubmit)="onSumbit(f)" id="form" #f="ngForm">
  <!-- <form method="POST" action="#"> -->
  <h5>Filter für Rechnungsgröße
    <fa-icon class="icn" [icon]="faQuestionCircle" placement="right" ngbTooltip="choosing the upper limit to Be zero means it is unlimited, also form zero to zero is denied"></fa-icon>
  </h5>
  <div>
    <div>
      <input type="radio" name="unlimtedRange" id="unlimtedRange" required>
      <label class="form-control-label" for="choiceUnlimted">unlimitiert</label>
    </div>
    <div>
      <input type="radio" name="unlimtedRange" id="limtedRange" required>
      <label class="form-control-label" for="choiceLimted">limitiert</label>
      <div class="reveal-if-active">
        <div class="input-group mb-3">
          <div class="input-group-prepend">
            <span class="input-group-text">von</span>
            <span class="input-group-text">€</span>
          </div>
          <input type="number" class="form-control" name="from" id="from" [(ngModel)]="fromVal" #from="ngModel" ngModel>
        </div>
        <div class="input-group">
          <input type="number" class="form-control" name="to" id="to" [(ngModel)]="toVal" #to="ngModel" ngModel>
          <div class="input-group-append">
            <span class="input-group-text">€</span>
            <span class="input-group-text">bis</span>
          </div>
        </div>
        <span class="help-block" *ngIf="to.value < from.value && to.value !== 0">to field can not be smaller than from field !</span>
      </div>
    </div>
  </div>
  <div class="section">
    <h5>Anzeigedauer einer Forderung</h5>
    <div class="inp">
      <input type="number" name="remainTime" id="remainTime" class="form-control" placeholder="Maximum 90 days" title="Maximal 90 Tage" [(ngModel)]="remainTimeVal" [formControl]="myControl" ngModel required>

    </div>
    <div>
      <button type="submit" class="btn btn-success" role="button">Annehmen</button>
      <a href="/#" class="btn btn-light" role="button">Zurücksetzen</a>
      <span>
          <p id="demo">
          </p>
      </span>
    </div>
  </div>
</form>

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Логика:

        this.form = new FormGroup({
        someRadio: new FormControl(),
        someInput1: new FormControl(),
        someInput2: new FormControl()
    });

    this.form.controls.someRadio.valueChanges.subscribe(val => {
        if (val === 1) {
            this.form.controls.someInput1.setValidators(Validators.required);
            this.form.controls.someInput2.clearValidators();
        }
        if (val === 2) {
            this.form.controls.someInput2.setValidators(Validators.required);
            this.form.controls.someInput1.clearValidators();
        }
        this.form.controls.someInput1.updateValueAndValidity();
        this.form.controls.someInput2.updateValueAndValidity();
    });

HTML:

<form [formGroup]="form">
<label>
    <input type="radio" name="someRadio" formControlName="someRadio" [value]="1"/>
    Some radio 1
</label>
<label>
    <input type="radio" name="someRadio" formControlName="someRadio" [value]="2"/>
    Some radio 2
</label>
<input type="text" name="someInput1" formControlName="someInput1" placeholder="some input 1">
<input type="text" name="someInput2" formControlName="someInput2" placeholder="some input 2">
<button type="submit" [disabled]="form.invalid">Submit</button>

Не стесняйтесь спрашивать, если что-то не ясно.

0 голосов
/ 17 сентября 2018
//Heare is sample code to add or remove validation on checkbox checked or unchecked

    ngOnInit() {
        this.testForm.get('checkbox').valueChanges
                             .subscribe(value => this.setValidator(value));
      }

    setValidator(checked: boolean): void {
        const textbox = this.testForm.get('textboxControlName');
        if (checked === true) {
          textbox.setValidators(Validators.required);
        } else {
          textbox.clearValidators();
        }
        textbox.updateValueAndValidity();
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...