AngularJs上传前预览图片的实例代码
程序员文章站
2022-06-07 23:20:53
在工作中,使用angularjs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,之前查了一些资料,结合实践,得出一种比较实用的方法,相对简化版,在这里记录一...
在工作中,使用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上传前预览图片的实例代码,希望对大家有所帮助
上一篇: Java NIO Buffer过程详解
下一篇: JackSon转换