发表于: 2017-07-15 23:33:18
1 856
一、今天完成的事:
1.学习HTML FileReader对象的方法;
2.尝试原生js实现图片上传,并显示预览和文件名称以及大小;
二、明天的计划:
1.继续研究图片上传问题
三、遇到的问题:
1.js实现图片上传的时候,获取图片正常,但是无法ng-repeat出来图片的名称和大小,请大佬查看后发现是ng-repeat的对象错了导致;
2.行业大图和下面的select框联动的时候,想直接用ng-modle绑定的数据来控制下面的select的显示,研究发现可以在ng-show里面设置表达式,直接判断上面的ng-modle是否选择的是行业大图;
四、收获:
1、学习了一下input的file类型时,会生成一个默认的files数组,里面存放的是文件的对象,然后根据HTNL5的FileReader属性转化文件的url或则文本;
FileReader默认有4个方法:
方法名 | 参数 | 描述 |
---|---|---|
abort | none | 中断读取 |
readAsBinaryString | file | 将文件读取为二进制码 |
readAsDataURL | file | 将文件读取为 DataURL |
readAsText | file, [encoding] | 将文件读取为文本 |
有默认事件:
事件 | 描述 |
---|---|
onabort | 中断时触发 |
onerror | 出错时触发 |
onload | 文件读取成功完成时触发 |
onloadend | 读取完成触发,无论成功或失败 |
onloadstart | 读取开始时触发 |
onprogress | 读取中 |
这样就可以实现图片传和预览了:
$scope.$apply(function(){
var file = document.getElementById("file1").files;
$scope.file = file;
console.log($scope.file);
var reader = new FileReader();
reader.readAsDataURL(file[0]);
// 图片文件转换为base64
reader.onload = function(){
// 显示图片
document.getElementById("file_img").src = this.result;
}
})
}
2、可以直接在ng-show中写表达式:判断上一个select的值即可;
ng-show="select1 == 3 "
3.转化图片文件大小,并控制显示小数位的方法:
<td>{{file.size/(1024*1024)|number:2}}MB</td>
评论