Проверка формы не работает в угловых - PullRequest
0 голосов
/ 08 апреля 2019

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

Я пытался использовать параметры ngmodel и ngForm для отключения кнопки, но она не активируется при заполнении ввода

это мой код

<form #uploadForm="ngForm">
    <div class="uploadDiv">
  <div *ngFor="let data of fileList, let i = index">

    <label class="adpLabel">{{data.fileDesc}}</label>   
    <input readonly class="adpInput" type="text" [(ngModel)]='listFilter' name="listFilter" value={{filename[i]}}>
    <input type="file" id="{{data.fileName}}"
    #selectFiles hidden accept=".xls,.xlsx" (change)="getFileInfo($event, i)">
    <button mat-button (click)="selectFiles.click()" class="browseBtn">Browse</button>    
  </div>

<div class="adpButtons"> 
        <button mat-button [disabled]="!uploadForm.valid" (click)="clickFileUpload()">Upload</button>
        <button mat-button disableRipple tabindex="-1" mat-dialog-close>Back</button>
</div>

    </div>
</form>

Я ожидаю, что кнопка загрузки будет активна при заполнении ввода

РЕДАКТИРОВАТЬ 1: Добавление кода

getFileInfo(event, i) {
   if(this.file[i]){
      this.file.splice(i,1,event.target.files);
      this.fileType.splice(i,1,event.target.id);
   }
   else{
      this.file[i]=event.target.files;
      this.fileType[i]=event.target.id;
      //this.file.push(event.target.files);
      //this.fileType.push(event.target.id);
   }
   for (let j = 0; j < this.file.length; j++) {
      let fileName:string='';
      let extension:string;
      if(event.target.files[j]){
       fileName=event.target.files[j].name;
       extension = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
      } 
      let id:any; 
      if(this.fileType[j]){
        id=this.fileType[j];
      }
      if ( extension==".xls" || extension==".xlsx" ) {
        this.filename[i] = fileName; 
        this.fileType[i] = id;
      }
   }
}

Ответы [ 5 ]

0 голосов
/ 26 июня 2019

Вы можете использовать обязательный атрибут в поле ввода, например

<input type="file" id="{{data.fileName}}"
#selectFiles hidden accept=".xls,.xlsx" (change)="getFileInfo($event, i)" required>

А также просто предложение, постарайтесь максимально использовать реактивные формы. Это так проще и имеет много опций по сравнению с формами на основе шаблонов.

0 голосов
/ 08 апреля 2019

Если вы хотите проверить, выбраны ли какие-либо файлы или нет, чтобы пользователь мог отправить запрос, проверьте length из fileList

<button mat-button [disabled]="fileList.length == 0" (click)="clickFileUpload()">Upload</button>

Вот Stackblitz

0 голосов
/ 08 апреля 2019

попробуйте задать шаблонную переменную для ввода, т.е.

<input .... #<tempvar name>="ngModel" />
0 голосов
/ 08 апреля 2019

Вместо NgModel используйте FormControlName для проверки.Для справки: https://angular.io/guide/reactive-forms

0 голосов
/ 08 апреля 2019

Вы на самом деле не используете угловые реактивные формы - или, по крайней мере, не правильно. https://angular.io/guide/reactive-forms

Вы определяете Formgroup и Controls в вашем .ts файле, форме с элементами управления в вашем .html файле и соединяете оба.

https://stackblitz.com/edit/angular-reactive-forms?file=app%2Fapp.component.html

.ts

SignupForm: FormGroup;

this.SignupForm = new FormGroup({
 'username':new FormControl(null),
 'email':new FormControl(null)
});

.html

<form [formGroup]="SignupForm" (ngSubmit)="onSubmit()">
 <input type="text" formControlName = "username">
</form>

С помощью этой настройки вы можете получить элементы управления из группы форм и оценить их статус

.ts

  get controlUsername() {
   return this.SignupForm.get('username');
  }

.html

<button [disabled]="!controlUsername.valid" type="submit">Submit</button> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...