【发布时间】:2018-10-30 17:49:09
【问题描述】:
我正在尝试克隆 https://imageresize.org/ 以练习 Angular 5。 但是,我遇到了一个问题,它阻止我将 typescript 文件中的值绑定到 html。
这是输入:
<input type="file" accept="image/*" autocomplete="off" style="display: none" id="input" draggable="true" (change)='changeInput()' multiple>
我也在使用xkeshi的图片压缩器(https://github.com/xkeshi/image-compressor)来压缩图片:
changeInput() {
this.img = <HTMLImageElement>document.querySelector('img,#image');
this.files = (<HTMLInputElement>document.querySelector('input[type=file],#input')).files
this.inputFlag = true;
for (var i = 0; i < this.files.length; i++) {
var imageCompressor = new ImageCompressor;
imageCompressor.compress(this.files[i],{
quality: .4
}).then((result)=>{
this.results[i] = result;
this.resultSize = result.size;
this.sizeRound = `${Math.round(100 - this.resultSize * 100 / this.fileSize)}%`;
})
}
}
results 是一个 Blob 数组,用于在循环中获取“result”的值:
results: Blob[] = [];
HTML 绑定:
<tr *ngFor ="let file of files, let i = index">
<td style="height: 30px" class="text-center">{{file.name.slice(0,7)}}</td>
<td style="height: 30px" class="text-center">{{status}}</td>
<td style="height: 30px" class="text-center"></td>
<td style="height: 30px" class="text-center">{{file.size}}</td>
<td style="height: 30px" class="text-center">{{results[i].size}}</td>
<td style="height: 30px" class="text-center">{{sizeRound}}</td>
</tr>
我得到的错误: a printscreen of the error 有谁知道如何解决这个问题?谢谢你。 p/s: 对不起我的英语,我不是母语人士
【问题讨论】:
-
你的
files数组包含什么? -
检查'this.files'中的内容,如果为空'return false'。
-
我在 results[] 数组中遇到错误,'files' 是一个保存输入文件值的 FileList 类型,现在可以正常工作
-
您是否尝试在
files模型中设置results,如下所示:this.files[i].results = result;并在您的html 中设置{{file?.results.size}}。这对你有帮助吗?????? -
@Sanoj_V 我无法设置
this.files[i].results = result,因为结果不属于文件类型
标签: javascript angular binding ngfor