AngularJs上传前预览图片的实例代码  更新时间:2017年01月20日 09:19:00   作者:happystareve   使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧 在工作中,使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,之前查了一些资料,结合实践,得出一种比较实用的方法,相对简化版,在这里记录一下,如有不同看法,欢迎一起沟通,一起成长。 demo.html: demo 主视觉图: 提交 myCtrl.js: //关键 js 部分 var myTestCtrl = angular.module(‘myTestCtrl’, []); //定义“上传”指令,修改后也可用于上传其他类型的文件 myTestCtrl.directive(“imgUpload”,function(){ return{ //通过设置项来定义 restrict: ‘AE’, scope: false, template: ”, //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; return false; } scope.fileName = scope.file[0].name; var postfix = scope.fileName.substring(scope.fileName.lastIndexOf(“.”)+1).toLowerCase(); if(postfix !=”jpg” && postfix !=”png”){ alert(“图片仅支持png、jpg类型的文件”); scope.fileName = “”; scope.file = null; scope.$apply(); return false; } scope.$apply(); scope.reader = new FileReader(); //创建一个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; var url = ”;//接口路径 var fd = new FormData(); 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; }); }; }); 关于angularjs的知识大家可以参考下小编给大家整理的专题,angularjs学习笔记,一起看看吧! 以上所述是小编给大家介绍的AngularJs上传前预览图片的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持! 您可能感兴趣的文章: AngularJS实现图片上传和预览功能的方法分析 Angularjs实现上传图片预览功能 angularjs点击图片放大实现上传图片预览 angularjs实现多张图片上传并预览功能 学习使用AngularJS文件上传控件 angularjs客户端实现压缩图片文件并上传实例 AngularJS 文件上传控件 ng-file-upload详解 通过AngularJS实现图片上传及缩略图展示示例 SpringMvc+Angularjs 实现多文件批量上传 Angularjs实现多图片上传预览功能 angularjs 上传 预览图片 相关文章 Angular1.x复杂指令实例详解 这篇文章主要介绍了Angular1.x复杂指令,结合实例形式分析了指令的使用、模板指令、指令的作用域等概念与具体使用技巧,需要的朋友可以参考下 2017-03-03 使用AngularJS制作一个简单的RSS阅读器的教程 这篇文章主要介绍了使用Angular.js制作一个简单的RSS阅读器的教程,AngularJS是一个非常有人气的JavaScript库,文中介绍的制作方法主要使用到了FreedReadR模版,需要的朋友可以参考下 2015-06-06 简介AngularJS中使用factory和service的方法 这篇文章主要简单介绍了AngularJS中使用factory和service的方法,主要针对自定义工厂和服务的创建来讲,需要的朋友可以参考下 2015-06-06 Angular5中调用第三方库及jQuery的添加的方法 这篇文章主要介绍了Angular5中调用第三方库及jQuery的添加的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-06-06 AngularJS解决ng-if中的ng-model值无效的问题 本篇文章主要介绍了AngularJS解决ng-if中的ng-model值无效的问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-06-06 angular 用拦截器统一处理http请求和响应的方法 下面小编就为大家带来一篇angular 用拦截器统一处理http请求和响应的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2017-06-06 AngularJs Javascript MVC 框架 这篇文章主要介绍了AngularJs Javascript MVC 框架的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 2016-06-06 详解Angular.js中$http拦截器的介绍及使用 拦截器就是在目标达到目的地之前对其进行处理以便处理结果更加符合我们的预期,下面这篇文章主要给大家介绍了关于Angular.js中$http拦截器的介绍及使用的相关资料,文中介绍的非常详细,需要的朋友可以参考学习。 2017-07-07 angular过滤器实现排序功能 这篇文章主要为大家详细介绍了angular过滤器实现排序功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-06-06 angularJS Provider、factory、service详解及实例代码 这篇文章主要介绍了angularJS Provider详解及实例代码的相关资料,需要的朋友可以参考下 2016-09-09 最新评论

在工作中,使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,之前查了一些资料,结合实践,得出一种比较实用的方法,相对简化版,在这里记录一下,如有不同看法,欢迎一起沟通,一起成长。

demo.html:

<!doctype html> 
<html ng-app="myTestCtrl"> 
<head> 
 <meta charset="UTF-8"> 
 <title>demo</title> 
 <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 <script src="myCtrl.js"></script> 
 <style type="text/css"> 
 .inputBox{width: 160px; height: 28px; padding: 0 0 0 8px; box-sizing: border-box; background-color:#fff; margin-left: 5px; border: 1px solid #c4c4c4; color: #333; border-radius: 3px; -o-border-radius: 3px;-moz-border-radius: 3px;-webkit-border-radius: 3px;} 
 .inputBox:focus{border: 1px solid #207fe9;} 
 .btn-primary {color: #fff; background-color: #428bca; border-color: #357ebd;} 
 .btn {display: inline-block; padding: 6px 12px; 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: 1px solid transparent; 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> 
<body id="myTestCtrl" ng-controller="myTestCtrl"> 
<div class="wrapper"> 
 <div class="content"> 
  <div class="f-cb" style="height: 40px;"> 
   <div class="topSearch"><span class="w70 tr dib fl">主视觉图:</span><input type="text" class="inputBox fl ml5" ng-model="fileName"><button class="btn btn-primary ml10" ng-class="{'bg-bbbbbb':imgDisabled}" style="width:60px; margin-top:-3px; height:18px; position: relative;" img-upload></button></div> 
  </div> 
  <div class="f-cb mt10"><img ng-src="{{thumb.imgSrc}}" style="width:200px; height: 200px;" ng-show="thumb.imgSrc"/></div> 
 </div> 
 <div class="mt20 ml30"> 
  <button class="btn btn-primary" ng-click="saveClick()" ng-class="{'bg-bbbbbb':submitDisabled}">提交</button> 
 </div> 
</div> 
</body> 
</html> 
<span style="font-size:14px;">myCtrl.js:</span> 
<pre name="code" class="javascript">//关键 js 部分 
var myTestCtrl = angular.module('myTestCtrl', []); 
//定义“上传”指令,修改后也可用于上传其他类型的文件 
myTestCtrl.directive("imgUpload",function(){ 
 return{ 
  //通过设置项来定义 
  restrict: 'AE', 
  scope: false, 
  template: '<div class="fl"><input type="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="选择文件"><input type="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; 
     return false; 
    } 
    scope.fileName = scope.file[0].name; 
    var postfix = scope.fileName.substring(scope.fileName.lastIndexOf(".")+1).toLowerCase(); 
    if(postfix !="jpg" && postfix !="png"){ 
     alert("图片仅支持png、jpg类型的文件"); 
     scope.fileName = ""; 
     scope.file = null; 
     scope.$apply(); 
     return false; 
    } 
    scope.$apply(); 
    scope.reader = new FileReader(); //创建一个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; 
  var url = '';//接口路径 
  var fd = new FormData(); 
  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上传前预览图片的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:

  • AngularJS实现图片上传和预览功能的方法分析
  • Angularjs实现上传图片预览功能
  • angularjs点击图片放大实现上传图片预览
  • angularjs实现多张图片上传并预览功能
  • 学习使用AngularJS文件上传控件
  • angularjs客户端实现压缩图片文件并上传实例
  • AngularJS 文件上传控件 ng-file-upload详解
  • 通过AngularJS实现图片上传及缩略图展示示例
  • SpringMvc+Angularjs 实现多文件批量上传
  • Angularjs实现多图片上传预览功能
张贴在3