AngularJs上传前预览图片的实例代码
在工作中,使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,之前查了一些资料,结合实践,得出一种比较实用的方法,相对简化版,在这里记录一下,如有不同看法,欢迎一起沟通,一起成长。
demo.html:
<!doctypehtml>
<htmlng-app="myTestCtrl">
<head>
<metacharset="UTF-8">
<title>demo</title>
<scriptsrc="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<scriptsrc="myCtrl.js"></script>
<styletype="text/css">
.inputBox{width:160px;height:28px;padding:0008px;box-sizing:border-box;background-color:#fff;margin-left:5px;border:1pxsolid#c4c4c4;color:#333;border-radius:3px;-o-border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;}
.inputBox:focus{border:1pxsolid#207fe9;}
.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd;}
.btn{display:inline-block;padding:6px12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1pxsolidtransparent;border-radius:4px;}
.bg-bbbbbb{background-color:#bbb;}
.fl{float:left;}
.ml5{margin-left:5px;}
.ml10{margin-left:10px;}
.ml30{margin-left:30px;}
.mt10{margin-top:10px;}
.mt20{margin-top:20px;}
.f-cb:after:after{display:block;clear:both;visibility:hidden;height:0;overflow:hidden;content:".";}
.f-cb{zoom:1;}
.f-cb.topSearch{float:left;margin-top:10px;line-height:30px;font-size:12px;}
</style>
</head>
<bodyid="myTestCtrl"ng-controller="myTestCtrl">
<divclass="wrapper">
<divclass="content">
<divclass="f-cb"style="height:40px;">
<divclass="topSearch"><spanclass="w70trdibfl">主视觉图:</span><inputtype="text"class="inputBoxflml5"ng-model="fileName"><buttonclass="btnbtn-primaryml10"ng-class="{'bg-bbbbbb':imgDisabled}"style="width:60px;margin-top:-3px;height:18px;position:relative;"img-upload></button></div>
</div>
<divclass="f-cbmt10"><imgng-src="{{thumb.imgSrc}}"style="width:200px;height:200px;"ng-show="thumb.imgSrc"/></div>
</div>
<divclass="mt20ml30">
<buttonclass="btnbtn-primary"ng-click="saveClick()"ng-class="{'bg-bbbbbb':submitDisabled}">提交</button>
</div>
</div>
</body>
</html>
<spanstyle="font-size:14px;">myCtrl.js:</span>
<prename="code"class="javascript">//关键js部分
varmyTestCtrl=angular.module('myTestCtrl',[]);
//定义“上传”指令,修改后也可用于上传其他类型的文件
myTestCtrl.directive("imgUpload",function(){
return{
//通过设置项来定义
restrict:'AE',
scope:false,
template:'<divclass="fl"><inputtype="button"id="storeBtn"style="padding:0;position:absolute;top:0;left:0;background:none;border:none;color:#fff;width:84px;height:30px;line-height:30px;"value="选择文件"><inputtype="file"name="testReport"id="file"ng-disabled="imgDisabled"style="position:absolute;top:0;left:0;opacity:0;height:30px;"accept=".jpg,.png"></div>',//name:testReport与接口字段相对应。
replace:true,
link:function(scope,ele,attrs){
ele.bind('click',function(){
$('#file').val('');
});
ele.bind('change',function(){
scope.file=ele[0].children[1].files;
if(scope.file[0].size>52428800){
alert("图片大小不大于50M");
scope.file=null;
returnfalse;
}
scope.fileName=scope.file[0].name;
varpostfix=scope.fileName.substring(scope.fileName.lastIndexOf(".")+1).toLowerCase();
if(postfix!="jpg"&&postfix!="png"){
alert("图片仅支持png、jpg类型的文件");
scope.fileName="";
scope.file=null;
scope.$apply();
returnfalse;
}
scope.$apply();
scope.reader=newFileReader();//创建一个FileReader接口
console.log(scope.reader);
if(scope.file){
//获取图片(预览图片)
scope.reader.readAsDataURL(scope.file[0]);//FileReader的方法,把图片转成base64
scope.reader.onload=function(ev){
scope.$apply(function(){
scope.thumb={
imgSrc:ev.target.result//接收base64,scope.thumb.imgSrc为图片。
};
});
};
}else{
alert('上传图片不能为空!');
}
});
}
};
});
myTestCtrl.controller("myTestCtrl",function($scope,$http){
//导入图片
$scope.saveClick=function(){
//禁用按钮
$scope.imgDisabled=true;
$scope.submitDisabled=true;
varurl='';//接口路径
varfd=newFormData();
fd.append('testReport',$scope.file[0]);//参数testReport=后台定义上传字段名称;$scope.file[0]内容
$http.post(url,fd,{
transformRequest:angular.identity,
headers:{
'Content-Type':undefined
}
}).success(function(data){
if(data.code!=100){
alert(JSON.stringify('文件导入失败:'+files.files[0].name+',请重新上传正确的文件或格式'));
}else{
alert(JSON.stringify('文件导入成功:'+files.files[0].name));
}
//恢复按钮
$scope.imgDisabled=false;
$scope.submitDisabled=false;
}).error(function(data){
alert('服务器错误,文件导入失败!');
//恢复按钮
$scope.imgDisabled=false;
$scope.submitDisabled=false;
});
};
});
</pre>
<br>
<pre></pre>
<p></p>
<pre>
</pre>
<p></p>
<pre>
</pre>
关于angularjs的知识大家可以参考下小编给大家整理的专题,angularjs学习笔记,一起看看吧!
以上所述是小编给大家介绍的AngularJs上传前预览图片的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!