在“ ngChanges”上处理此方案的正确方法是什么

时间:2019-11-28 05:02:43

标签: angular angular8 angular-input

我正在通过@input值向孩子提供可下载的数据。当用户单击下载链接时,它正在下载文件而没有任何问题。

但是只要ngOnchanges发生变化并被观察到,它就会再次触发下载,而我正在下载一个未知文件。那么,如何解决它?或者我怎样才能让它仅通过用户单击就可以下载文件?

在用户单击时,我正在触发下载事件。

@Input() cpDownloadedFile: any;


initDownloadFile(fileData) {

    this.fileDownloaded.emit(fileData.Id);

}

ngOnChanges() {

      change1,

      change 2

       //other changes goes here

      if (this.cpDownloadedFile && changes.cpDownloadedFile) {
            const element = document.createElement('a');
            element.href = URL.createObjectURL(this.cpDownloadedFile);
            element.download = this.fileName.replace(/ /g, '').replace(/\_(?=[^_]*$).*(?=\.)/g, '');
            document.body.appendChild(element);
            element.click();
        }

}

1 个答案:

答案 0 :(得分:0)

根据我从给定信息中了解到的信息,即使ngOnChanges导致文件因其他属性的更改而下载,它也应该触发最后下载文件的下载。您确定cpDownloadedFile不会在其他地方更改吗?

尝试将if条件替换为以下内容,

if (this.cpDownloadedFile && changes.cpDownloadedFile &&
    changes.cpDownloadedFile.currentValue !== changes.cpDownloadedFile.previousValue )
    { /* download code */ }

Ref