0

I am using private _fb: FormBuilder to build my form in Angular 8. My form is initialized like this

this.itemForm = this._fb.group({
  title: ['', [Validators.required, this._systemSvc.nonSpaceString]],
  file: ['', Validators.required],
  categories: [''],
  tags: ['']
});

The template is

     <form class="needs-validation" [formGroup]="itemForm" (ngSubmit)="createPost()">
      <div class="form-row">
        <div class="col-md-4 mb-3">
          <div class="form-row mb-3">
            <div class="col-md-12 mb-3">
              <label class="text-primary"><strong>Title</strong></label>
              <input type="text" formControlName="title" class="form-control"
                [ngClass]="{ 'is-invalid': checkError('title') }">
              <div *ngIf="checkError('title')" class="invalid-feedback">
                <div *ngIf="f.title.errors.required">Title is required</div>
                <div *ngIf="f.title.errors.whitespace">Title can't be blank space</div>
              </div>
            </div>
          </div>
          <div class="row mb-3">
            <div class="col-md-6 mb-3">
              <label class="text-primary"><strong>Categories</strong></label>
              <select formControlName="categories" class="custom-select">
                <option value="">--Select categories--</option>
                <option value="Funny">Funny</option>
                <option value="Music">Music</option>
                <option value="Adventure">Adventure</option>
              </select>
            </div>
          </div>
          <div class="row mb-3">
            <div class="col-md-12 mb-3">
              <label class="text-primary" for="tags"><strong>Tags</strong></label>
              <div>
                <ng-container *ngFor="let tag of parsedTags;">
                  <a href="" class="mr-1">#{{tag}}</a>
                </ng-container>
              </div>
              <input id="tags" type="text" formControlName="tags" class="w-100"
                (input)="onTagsChange($event.target.value)">
            </div>
          </div>
        </div>
        <div class="col-md-7 mb-3 offset-md-1">
          <div class="form-row mb-3">
            <div class="col-md-12 mb-3">
              <label class="text-primary" for="upload"><strong>Choose file</strong></label>
              <div class="custom-file">
                <label class="custom-file-label" for="upload">Choose file</label>
                <input type="file" class="custom-file-input" formControlName="file" id="upload"
                  (change)="handleFileInput($event.target.files)" accept="audio/*, video/*, image/*"
                  [ngClass]="{ 'is-invalid': checkError('file') }">
                <div *ngIf="checkError('file')" class="invalid-feedback">
                  <div *ngIf="f.file.errors.required">File is required</div>
                </div>
              </div>
            </div>
          </div>
          <div class="form-row mb-3">
            <div class="col-md-12 mb-3">
              <img *ngIf="uploadedFile" src="{{uploadedFile}}" class="w-100" id="previewImg">
            </div>
          </div>
        </div>
      </div>
      <div class="form-row">
        <div class="col-md-2 form-group">
          <button type="button" id="cancelBtn" class="btn btn-primary mr-2" data-dismiss="modal">Cancel</button>
          <button type="submit" class="btn btn-success">Post</button>
        </div>
      </div>
    </form>

Every thing work well on Firefox and Chrome. But when it come to Edge, user select file but the reactive form doesn't recognize the selected file. Other controls like input = text and drop down are still ok on Edge. The form is invalid and say only the file is empty. This is the snapshot of the form

controls: Object
dirty: true
disabled: false
enabled: true
errors: null
invalid: true
parent: undefined
pending: false
pristine: false

root: Object
status: "INVALID"

statusChanges: Object
touched: true
untouched: false
updateOn: "change"
valid: false
validator: null

value: Object
categories: "Funny"
file: ""
tags: "asd"
title: "asd"
2

1 Answer 1

0

I had the same problem and I have resolved that by manualy set validation to null.

Create function in which check if input has file or not and inside it use below:

this.itemForm.controls['file'].setErrors(null)

It really works.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.