<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Angularjs實現多圖片上傳預覽功能

        來源:懂視網 責編:小采 時間:2020-11-27 22:11:20
        文檔

        Angularjs實現多圖片上傳預覽功能

        Angularjs實現多圖片上傳預覽功能:最近要實現一個多圖片上傳的預覽功能,網上有很多例子大多不太完整,我就把他們的整合了下并且加了一些功能和界面,我們只需要調用一條指令就可以實現,但傳給后臺還需要額外的代碼,會在后面controller里介紹。不知道封裝的是否符合標準,還希望大家一起討論
        推薦度:
        導讀Angularjs實現多圖片上傳預覽功能:最近要實現一個多圖片上傳的預覽功能,網上有很多例子大多不太完整,我就把他們的整合了下并且加了一些功能和界面,我們只需要調用一條指令就可以實現,但傳給后臺還需要額外的代碼,會在后面controller里介紹。不知道封裝的是否符合標準,還希望大家一起討論

        最近要實現一個多圖片上傳的預覽功能,網上有很多例子大多不太完整,我就把他們的整合了下并且加了一些功能和界面,我們只需要調用一條指令就可以實現,但傳給后臺還需要額外的代碼,會在后面controller里介紹。不知道封裝的是否符合標準,還希望大家一起討論下,如果有時間封裝下Angular4的圖片上傳和預覽分享給大家。

        圖片上傳的預覽,我們最主要解決的是拿到input的on-change事件,再是讀取圖片,讀取圖片我們需要用到FileReader。

        我們先寫一個讀取圖片的服務,這是網上的一位大佬寫的,我就直接拿了過來

        /**
         * 圖片上傳獲取返回的url
         */
         app .factory('fileReader', ["$q", "$log", function($q, $log){
         var onLoad = function(reader, deferred, scope) {
         return function () {
         scope.$apply(function () {
         deferred.resolve(reader.result);
         });
         };
         };
        
         var onError = function (reader, deferred, scope) {
         return function () {
         scope.$apply(function () {
         deferred.reject(reader.result);
         });
         };
         };
        
         var getReader = function(deferred, scope) {
         var reader = new FileReader(); //fileReader
         reader.onload = onLoad(reader, deferred, scope);
         reader.onerror = onError(reader, deferred, scope);
         return reader;
         };
        
         var readAsDataURL = function (file, scope) {
         var deferred = $q.defer();
         var reader = getReader(deferred, scope); 
         reader.readAsDataURL(file); 
         return deferred.promise;
        
         };
        
         return {
         readAsDataUrl: readAsDataURL 
         };
        }])

        我們現在有了圖片的讀取,我們再來搞定圖片的on-change事件

        /**
         * 圖片上傳預覽
         */
        app .directive('file', ['$parse', 'fileReader', function ($parse, fileReader) { 
         return {
         restrict: 'A',
         link: function(scope, element, attrs, ngModel) {
        
         var model = $parse(attrs.file);
         var modelSetter = model.assign;
         console.log(modelSetter)
         element.bind('change', function(event){
         scope.$apply(function(){
         modelSetter(scope, element[0].files[0]);
         });
         //附件預覽 
         scope.imgupload = (event.srcElement || event.target).files[0];
         getFile(scope.imgupload, scope);
        
         //獲得預覽圖地址并且把file對象放入上傳合集內
         function getFile (imgupload, scope) {
         if(!imgupload) {
         return;
         }
         fileReader.readAsDataUrl(imgupload, scope)
         .then(function(result) {
         scope.imgshows.push(result)
         var file = document.querySelector('input[type=file]').files[0];
         scope.uploadimgs.push(file)//這里是放著傳給后臺的數據file,下面controller的時候會有
         });
         };
         });
         }
         };
         }]) 

        這里就是提供上傳圖片預覽的樣式,還有預覽圖刪除的功能

        app .directive('uploadimg', function () { 
         return {
         restrict: 'E', 
         scope: {
         uploadimgs: "="
         },
         templateUrl: './js/directives/uploadimg/uploadimg.html', 
         link: function(scope, element, attrs) {
         scope.imgshows = []//預覽圖片合集放的是src 
         scope.uploadimg_del = function(index,imgs) { 
         scope.imgshows.splice(index,1);
         scope.uploadimgs.splice(index,1);
         }
         }
         }
        }) 
        <style type="text/css">
        .fileupload {
         width: 100px;
         height: 100px;
         border: 1px dotted #ccc;
         display: inline-block;
        }
        .fileupload-icon {
         font-size:32px;
         position: absolute;
         top: 50%;
         left: 50%;
         transform: translate(-50%,-50%);
        }
        </style>
        <div>
         <div class="fileupload pos-rlt" ng-repeat="imageSrc in imgshows">
         <img ng-src="{{imageSrc}}" style="max-width:200px;max-height:300px;margin:0 auto; display:block;" class="pos-rlt" width=100%; height=100%;/>
         <i class="icon ion-close-circled" style="position: absolute; top:5px; right: 5px" ng-click="uploadimg_del($index, imgshows)"></i>
         </div>
         <div class="fileupload pos-rlt clear" >
         <i class="icon ion-plus-round fileupload-icon"></i>
         <input type="file" style="display:inline-block; width: 100%; height: 100%; opacity:0" name="upload_img" file="upload_img" placeholder="選擇圖片" accept="image/png,image/gif,image/jpeg,image/jpg" >
         </div>
        </div>
        </label>
        
        

        最后的調用也很簡單
        我們只需要在2個地方加代碼一個是在界面,一個是在Controller里

        <uploadimg uploadimgs="uploadimgs"></uploadimg>

        這個是在Controller里的,這是用來傳給后臺的數據集合,我們需要傳給后臺的是file對象

        $scope.uploadimgs = []//上傳圖片合集放的是file對象

        如何傳給后臺呢,直接附上代碼,其實不難

        $scope.save = function() { 
         var Fromdata = {
         'name': $scope.form.name,
         'desc': $scope.form.descr,
         'price': $scope.form.price,
         'status': $scope.form.status?1:0,
        
         }
         var uploadData = createFromData(Fromdata)
         for(var i = 0; i < $scope.uploadimgs.length; i++) {
         uploadData.append('upload_imgs', $scope.uploadimgs[i])
         }
        
         $http({
         method:'POST',
         url:"后臺地址",
         data: fd,
         headers: {'Content-Type':undefined},
         transformRequest: angular.identity
         })
         .success( function(response){
         //上傳成功的操作
        
         });
        
         } 
        
        //構造FormData
        //@param 是一個對象
        function createFromData(Fromdata) {
         var fd = new FormData();
         for(key in Fromdata) {
         fd.append(key,Fromdata[key]); 
         }
         return fd
        }

        最后給大家看下預覽圖

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Angularjs實現多圖片上傳預覽功能

        Angularjs實現多圖片上傳預覽功能:最近要實現一個多圖片上傳的預覽功能,網上有很多例子大多不太完整,我就把他們的整合了下并且加了一些功能和界面,我們只需要調用一條指令就可以實現,但傳給后臺還需要額外的代碼,會在后面controller里介紹。不知道封裝的是否符合標準,還希望大家一起討論
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 四虎国产精品免费视| 希望影院高清免费观看视频| 四虎影在线永久免费四虎地址8848aa| 久久精品国产亚洲77777| 无码A级毛片免费视频内谢| 亚洲国产综合专区电影在线| 久久国产乱子伦精品免费一| 亚洲av日韩综合一区在线观看| 日本视频免费高清一本18 | 国产真实伦在线视频免费观看| 亚洲一区二区三区播放在线| 国内自产少妇自拍区免费| 亚洲国产无线乱码在线观看| 国产一级做a爱免费视频| 老司机午夜在线视频免费| 亚洲人成无码久久电影网站| 久青草视频在线观看免费| 久久久青草青青亚洲国产免观| 九九精品成人免费国产片| 91亚洲一区二区在线观看不卡 | 国产福利在线观看免费第一福利| 亚洲综合av一区二区三区| 国产精品99久久免费| 99re6在线精品免费观看| 久久久久亚洲AV成人无码| 国产福利在线观看免费第一福利| 亚洲av成人一区二区三区观看在线 | 日韩精品免费在线视频| 亚洲国产成+人+综合| 日本xxwwxxww在线视频免费| 新最免费影视大全在线播放| 亚洲Av无码专区国产乱码DVD| 亚欧在线精品免费观看一区| 久久久亚洲精华液精华液精华液| 国产L精品国产亚洲区久久| 久久午夜羞羞影院免费观看| 亚洲精品美女久久久久久久| 亚洲gv猛男gv无码男同短文| 日韩精品福利片午夜免费观着| 日韩免费高清一级毛片| 亚洲成人在线网站|