如何自定义PrimeNG p文件上传

Pau*_*ems 3 file-upload primeng angular

我们使用对文件上传PrimeNG 1.0.0-beta.16

我要自定义按钮。现在,它们具有标签“选择”,“上传”和“取消”。如何更改标签?

另一个相关的问题。选择一些文件后,将显示文件名和文件大小。如何更改文件大小的格式?现在显示为“ 877.271 KB”。3位数字有点混乱。如何将其更改为仅显示1位数字:“ 877.2 KB”

我尝试了ith模板:

        <template let-file pTemplate type="file">
            <div>{{file.name}}</div>
            <div>{{file.size}}</div>
        </template>
Run Code Online (Sandbox Code Playgroud)

现在,我可以完全控制文件的大小,并且可以根据需要设置其格式,但是我没有再次使用“删除”按钮。我也需要重新实现。仅更改文件大小的格式似乎有点过大。

Dar*_*man 6

我不知道这是否仍然有帮助,但我在另一个网页中找到了解决方案。首先,这是html部分的代码:

<p-fileUpload #fileUploader name="file">
    <ng-template let-file pTemplate='file'>
        <div>{{file.name}}</div>
        <div>{{file.size | convertFileSize}}</div>
        <div><button icon="fa-close" pButton type="button" label="Remove" (click)="removeFile(file, fileUploader)"></button></div>
    </ng-template>
</p-fileUpload>
Run Code Online (Sandbox Code Playgroud)

因此,该按钮正在调用component.ts 中的自定义removeFile函数,并将要删除的文件(由模板提供)和 fileUpload 组件本身传递给该方法,如下所示:

removeFile(file: File, uploader: FileUpload) {
  const index = uploader.files.indexOf(file);
  uploader.remove(null, index);
}
Run Code Online (Sandbox Code Playgroud)

分析FileUpload原始组件的remove方法,我看到第一个param(例子中为null)是一个MouseEvent,所以null实际上可以被Event的派生类替换。


And*_*riy 5

正如@Paul已经提到的,我们可以使用HTML属性轻松修改3个标签:

<p-fileUpload name="myfile[]" 
              url="http://localhost:3000/upload"
              chooseLabel="My choose"
              uploadLabel="My upload"
              cancelLabel="My cancel"></p-fileUpload>
Run Code Online (Sandbox Code Playgroud)

负责格式大小格式化的功能是:

FileUpload.prototype.formatSize = function (bytes) {
  if (bytes == 0) {
    return '0 B';
  }
  var k = 1000, 
      dm = 3, 
      sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],    
      i = Math.floor(Math.log(bytes) / Math.log(k));
  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
};
Run Code Online (Sandbox Code Playgroud)

我从https://unpkg.com/primeng@2.0.0-rc.1/components/fileupload/fileupload复制了它,因为我们可以看到dm变量是浮点后的位数的原因。让我们将其从3修改为1,并覆盖此功能。

一,进口FileUpload舱:

import {FileUpload, FileUploadModule} from 'primeng/primeng';
Run Code Online (Sandbox Code Playgroud)

其次,覆盖其原型功能:

FileUpload.prototype.formatSize = function (bytes) {
  if (bytes == 0) {
    return '0 B';
  }
  var k = 1000, 
      dm = 1, 
      sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], 
      i = Math.floor(Math.log(bytes) / Math.log(k));
  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
};
Run Code Online (Sandbox Code Playgroud)

朋克:http ://plnkr.co/edit/yo6LyYgKlThcewtpjiyI?p=preview