AngularJs上傳前預(yù)覽圖片的實例代碼
在工作中,使用AngularJs進行開發(fā),在項目中,經(jīng)常會遇到上傳圖片后,需在一旁預(yù)覽圖片內(nèi)容,之前查了一些資料,結(jié)合實踐,得出一種比較實用的方法,相對簡化版,在這里記錄一下,如有不同看法,歡迎一起溝通,一起成長。
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">//關(guān)鍵 js 部分 var myTestCtrl = angular.module('myTestCtrl', []); //定義“上傳”指令,修改后也可用于上傳其他類型的文件 myTestCtrl.directive("imgUpload",function(){ return{ //通過設(shè)置項來定義 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 與接口字段相對應(yīng)。 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(); //創(chuàng)建一個FileReader接口 console.log(scope.reader); if (scope.file) { //獲取圖片(預(yù)覽圖片) scope.reader.readAsDataURL(scope.file[0]); //FileReader的方法,把圖片轉(zhuǎn)成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) { //導(dǎo)入圖片 $scope.saveClick = function () { //禁用按鈕 $scope.imgDisabled = true; $scope.submitDisabled = true; var url = '';//接口路徑 var fd = new FormData(); fd.append('testReport', $scope.file[0]);//參數(shù) testReport=后臺定義上傳字段名稱 ; $scope.file[0] 內(nèi)容 $http.post(url, fd, { transformRequest: angular.identity, headers: { 'Content-Type': undefined } }).success(function (data) { if(data.code != 100) { alert(JSON.stringify('文件導(dǎo)入失?。?+files.files[0].name+',請重新上傳正確的文件或格式')); }else{ alert(JSON.stringify('文件導(dǎo)入成功:'+files.files[0].name)); } //恢復(fù)按鈕 $scope.imgDisabled = false; $scope.submitDisabled = false; }).error(function (data) { alert('服務(wù)器錯誤,文件導(dǎo)入失??!'); //恢復(fù)按鈕 $scope.imgDisabled = false; $scope.submitDisabled = false; }); }; }); </pre> <br> <pre></pre> <p></p> <pre> </pre> <p></p> <pre> </pre>
關(guān)于angularjs的知識大家可以參考下小編給大家整理的專題,angularjs學習筆記,一起看看吧!
以上所述是小編給大家介紹的AngularJs上傳前預(yù)覽圖片的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- AngularJS實現(xiàn)圖片上傳和預(yù)覽功能的方法分析
- Angularjs實現(xiàn)上傳圖片預(yù)覽功能
- angularjs點擊圖片放大實現(xiàn)上傳圖片預(yù)覽
- angularjs實現(xiàn)多張圖片上傳并預(yù)覽功能
- 學習使用AngularJS文件上傳控件
- angularjs客戶端實現(xiàn)壓縮圖片文件并上傳實例
- AngularJS 文件上傳控件 ng-file-upload詳解
- 通過AngularJS實現(xiàn)圖片上傳及縮略圖展示示例
- SpringMvc+Angularjs 實現(xiàn)多文件批量上傳
- Angularjs實現(xiàn)多圖片上傳預(yù)覽功能
相關(guān)文章
解決angular的$http.post()提交數(shù)據(jù)時后臺接收不到參數(shù)值問題的方法
這篇文章為大家分享了解決angular的$http.post()提交數(shù)據(jù)時后臺接收不到參數(shù)值問題的方法,感興趣的小伙伴們可以參考一下2015-12-12關(guān)于AngularJS中ng-repeat不更新視圖的解決方法
今天小編就為大家分享一篇關(guān)于AngularJS中ng-repeat不更新視圖的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09Angular 2父子組件數(shù)據(jù)傳遞之@Input和@Output詳解(下)
這篇文章主要給大家介紹了關(guān)于Angular 2父子組件數(shù)據(jù)傳遞之@Input和@Output的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-07-07Angular2管道Pipe及自定義管道格式數(shù)據(jù)用法實例分析
這篇文章主要介紹了Angular2管道Pipe及自定義管道格式數(shù)據(jù)用法,結(jié)合實例形式詳細分析了Angular2管道與純管道相關(guān)概念、語法及使用技巧,需要的朋友可以參考下2017-11-11