PrimeNG 手动调用 FileUpload

Posted

技术标签:

【中文标题】PrimeNG 手动调用 FileUpload【英文标题】:PrimeNG manually invoke FileUpload 【发布时间】:2017-10-24 12:10:08 【问题描述】:

我想先选择文件,然后通过另一个按钮而不是组件自己的Upload 按钮开始上传这些文件。

我该怎么做?

我尝试过的示例代码:

<button pButton type="button" label="Start Upload"
        (click)="startUpload()"></button>

<p-fileUpload #fileInput name="fileIcon"
              url="rest/batch/file/multimedia/"></p-fileUpload>


@ViewChild('fileInput') fileInput:ElementRef;

constructor( private renderer: Renderer )  

startUpload()

    // this.fileInput.upload(); -> doesn't compile, undefined
    // this.fileInput.nativeElement.upload(); -> this.fileInput.nativeElement is undefined

    ?????????????????

【问题讨论】:

【参考方案1】:

适合我的示例代码

import FileUpload from 'primeng/primeng';

@Component(
  ...
)
export class AppComponent 
    @ViewChild('fileInput') fileInput: FileUpload;

    startUpload()
        this.fileInput.upload();
    

Plunker Example

【讨论】:

如此简单,将fileInput:ElementRef 更改为fileInput:FileUpload 解决了这个问题。谢谢你.. 它可以工作,但是最好通过 POST 提交一些其他参数 我无法完成这项工作。我在浏览器控制台中收到此消息:找不到模块:错误:无法解析 'primeng/primeng' in... 即使将路径更改为 'primeng/fileupload/fileupload' 也不起作用。请,任何帮助将不胜感激。我这样声明 viewchild:@ViewChild(FileUpload, static: false) btnUpload: FileUpload;【参考方案2】:

如果可以,您应该使用内置按钮。要访问类变量和方法,您可以使用 ViewChild。你应该:

    将 customUpload 设置为 true。 为自定义上传设置您的 uploadHandler 在模板中设置局部变量#variable_name。 在 component.ts 中添加带有局部变量的 ViewChild 作为选择器

    使用 FileUpload 类型将新变量添加到您的 component.ts(所以现在您可以访问变量和方法 - 在 VS Code 中,您可以单击右键并转到定义以查看所有内容)

    @ViewChild('fileInput') fileInput:FileUpload;
    // remember to import FileUpload and of course FileUploadModule
    
    onSelect() 
      // here custom validation for file (for example check image's dimension)
    
    customUpload(event) 
      // here you can set your custom upload
    
    

【讨论】:

以上是关于PrimeNG 手动调用 FileUpload的主要内容,如果未能解决你的问题,请参考以下文章

如何从 JSON 获取数据以在 PrimeNG 折线图中使用?

隐藏带有条件的 Primeng 上下文菜单

为 PrimeNG 组件编辑 CSS

PrimeNG安装使用

如何使 PrimeNG 菜单栏组件工作?

Primeng 的 [styleClass] 带条件样式