Почему nzBeforeUpload с параметром multiple вызывается несколько раз

#ng-zorro-antd

#ng-zorro-antd

Вопрос:

Я использую Angular 10 и ng-zorro, и я использую компонент nz-upload, и у меня есть вопрос:

Почему beforeUpload вызывается равным загруженным файлам? если у нас есть параметр nzFileUpload[], это похоже на нежелательное повторение

Мой html-код:

  <div>
   <nz-upload
      ngDefaultControl
      nzType="drag"
      (click)="form.get('files').markAsTouched()"
      [nzDirectory]="false"
      [nzBeforeUpload]="beforeUpload"
      [nzDisabled]="false"
      [nzLimit]="fileMaxQuantity"
      [nzSize]="0"
      [nzListType]="'text'"
      [nzMultiple]="true"
      [nzShowUploadList]="false"
      [nzShowButton]="false"
      (nzChange)="handleChange($event)"
       >
       <p class="ant-upload-drag-icon" style="margin-bottom: unset;">
          <i nz-icon nzType="cloud-upload"></i>
        </p>
        <p class="ant-upload-text">{{ '::FileUpload:FilesUploadMessage' | abpLocalization }}
        </p>
        <p class="ant-upload-hint">
           {{ '::FileUpload:FilesUploadHint' | abpLocalization }}
        </p>
    </nz-upload>
    <mat-error *ngIf="form.get('files').hasError('required') amp;amp; form.get('files').touched">
       {{ '::FileUpload:FilesFieldRequired' | abpLocalization}}
     </mat-error>
    </div>
  

И my .ts (перед загрузкой):

 beforeUpload = (singleFile: File, fileList: File[]): boolean => {
    // if (this.form.controls.files as FormArray)
    const fileNames = this.form.controls.fileNames.value as [];
    if (fileNames.length === this.fileMaxQuantity) {
      this.snackBarService.warning(this.localizationService.instant('::FileUpload:NumberFilesExceedsAllowed'), true);
      return false;
    } else {
      for (let i = 0; i <= fileList.length; i  ) {
        const file = fileList[i];
      // _.each(fileList, (file) => {
        if (this.form.controls.fileNames.value.length === this.fileMaxQuantity) {
          this.snackBarService.warning(this.localizationService.instant('::FileUpload:NumberFilesExceedsAllowed'));
          break;
          // return false;
        } else {
          const tempStackSize = this.actualFileStackSize   file.size;
          if (file.size > this.fileMaxSize || tempStackSize > this.fileMaxSize) {
            this.snackBarService.warning(this.localizationService.instant('::FileUpload:FileTooHeavy'), true);
            return false;
          } else if ( !this.fileList.some( p => p.name === file.name ) ) {
            const ext = this.extensionPipe.transform(file.name);
            let control: FormControl;
            (this.form.controls.files as FormArray).push(new FormControl(file.name));
            (!this.regexWithExt.test(file.name)) ?
              this.fileListRequired.push(true) : // debe cambiar filename
              this.fileListRequired.push(false);

            control = new FormControl(file.name.replace(ext, ''),
              [ Validators.pattern(this.regex),
                Validators.required,
                Validators.maxLength(this.fileNameMaxLength - ext.length),
                this.fileNameValidator()]);
            control.markAllAsTouched();
            (this.form.controls.fileNames as FormArray).push(control);
            // fileNames.push(file.name);
            this.fileList.push(file);
            this.actualFileStackSize = tempStackSize;
          }
        }
      }
      // fileList.forEach((file) => {
      // });
    }
    return false;
  }
  

Из вышесказанного проблема в том, что эта функция beforeUpload вызывается равной размеру списка файлов.

Комментарии:

1. Пожалуйста, покажите какой-нибудь код, чтобы разобраться в вашей проблеме. Было бы неплохо увидеть ваш <nz-upload ... элемент и вашу beforeUpload функцию.

2. @xDrago Я обновил описание, спасибо!

3. Если вы видите журнал консоли, напишите «up» для каждого загруженного файла: stackblitz.com/edit/angular-wszv2f?file=src/app /…

4. Я протестировал его, и, похоже, он работает так, как они этого хотят. Метод вызывается для каждого файла отдельно. То же самое и в моих проектах.

5. Основная проблема заключается в том, что всплывающее окно появляется несколько раз, если проверка не прошла. Вы считаете, что я мог бы открыть проблему в github, чтобы отменить подписку при ошибке?