亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

AngualrJS中每次$http請求時的一個遮罩層Directive

2019-11-20 10:41:17
字體:
來源:轉載
供稿:網友

AngularJS是一款非常強大的前端MVC框架。在AngualrJS中使用$http每次向遠程API發送請求,等待響應,這中間有些許的等待過程。如何優雅地處理這個等待過程呢?

如果我們在等待過程中彈出一個遮罩層,會是一個比較優雅的做法。

這就涉及到了對$http的請求響應進行攔截了。請求的時候,彈出一個遮罩層,收到響應的時候把遮罩層隱藏。

其實,$httpProvider已經為我們提供了一個$httpProvider.interceptors屬性,我們只需要把自定義的攔截器放到該集合中就可以了。

如何表現呢?大致是這樣的:

<div data-my-overlay><br/><img src="spinner.gif" />   Loading</div> 

顯示加載的圖片被包含在Directive中了,肯定會用到transclusion。

還涉及到一個遮罩層彈出延遲時間的問題,這個我們希望在config中通過API設置,所以,我們有必要創建一個provider,通過這個設置延遲時間。

$http請求響應遮罩層的Directive:

(function(){var myOverlayDirective =function($q, $timeout, $window, httpInterceptor, myOverlayConfig){return {restrict: 'EA',transclude: true,scope: {myOverlayDelay: "@"},template: '<div id="overlay-container" class="onverlayContainer">' +'<div id="overlay-background" class="onverlayBackground"></div>' +'<div id="onverlay-content" class="onverlayContent" data-ng-transclude>' +'</div>' +'</div>',link: function(scope, element, attrs){var overlayContainer = null,timePromise = null,timerPromiseHide = null,inSession = false,queue = [],overlayConfig = myOverlayConfig.getConfig();init();//初始化function init(){wireUpHttpInterceptor();if(window.jQuery) wirejQueryInterceptor();overlayContainer = document.getElementById('overlay-container');}//自定義Angular的http攔截器function wireUpHttpInterceptor(){//請求攔截httpInterceptor.request = function(config){//判斷是否滿足顯示遮罩的條件if(shouldShowOverlay(config.method, config.url)){processRequest();}return config || $q.when(config);};//響應攔截httpInterceptor.response = function(response){processResponse();return response || $q.when(response);}//異常攔截httpInterceptor.responseError = function(rejection){processResponse();return $q.reject(rejection);}}//自定義jQuery的http攔截器function wirejQueryInterceptor(){$(document).ajaxStart(function(){processRequest();});$(document).ajaxComplete(function(){processResponse();});$(document).ajaxError(function(){processResponse();});}//處理請求function processRequest(){queue.push({});if(queue.length == 1){timePromise = $timeout(function(){if(queue.length) showOverlay();}, scope.myOverlayDelay ? scope.myOverlayDelay : overlayConfig.delay);}}//處理響應function processResponse(){queue.pop();if(queue.length == 0){timerPromiseHide = $timeout(function(){hideOverlay();if(timerPromiseHide) $timeout.cancel(timerPromiseHide);},scope.myOverlayDelay ? scope.myOverlayDelay : overlayConfig.delay);}}//顯示遮罩層function showOverlay(){var w = 0;var h = 0;if(!$window.innerWidth){if(!(document.documentElement.clientWidth == 0)){w = document.documentElement.clientWidth;h = document.documentElement.clientHeight;} else {w = document.body.clientWidth;h = document.body. clientHeight;}}else{w = $window.innerWidth;h = $window.innerHeight;}var content = docuemnt.getElementById('overlay-content');var contetWidth = parseInt(getComputedStyle(content, 'width').replace('px',''));var contentHeight = parseInt(getComputedStyle(content, 'height').replace('px',''));content.style.top = h / 2 - contentHeight / 2 + 'px';content.style.left = w / 2 - contentWidth / 2 + 'px';overlayContainer.style.display = 'block';}function hideOverlay(){if(timePromise) $timeout.cancel(timerPromise);overlayContainer.style.display = 'none';}//得到一個函數的執行結果var getComputedStyle = function(){var func = null;if(document.defaultView && document.defaultView.getComputedStyle){func = document.defaultView.getComputedStyle;} else if(typeof(document.body.currentStyle) !== "undefined"){func = function(element, anything){return element["currentStyle"];}}return function(element, style){reutrn func(element, null)[style];}}();//決定是否顯示遮罩層function shouldShowOverlay(method, url){var searchCriteria = {method: method,url: url};return angular.isUndefined(findUrl(overlayConfig.exceptUrls, searchCriteria));}function findUrl(urlList, searchCriteria){var retVal = undefined;angular.forEach(urlList, function(url){if(angular.equals(url, searchCriteria)){retVal = true;return false;//推出循環}})return retVal;}}}};//配置$httpProvidervar httpProvider = function($httpProvider){$httpProvider.interceptors.push('httpInterceptor');};//自定義interceptorvar httpInterceptor = function(){return {};};//提供配置var myOverlayConfig = function(){//默認配置var config = {delay: 500,exceptUrl: []};//設置延遲this.setDelay = function(delayTime){config.delay = delayTime;}//設置異常處理urlthis.setExceptionUrl = function(urlList){config.exceptUrl = urlList;};//獲取配置this.$get = function(){return {getDelayTime: getDelayTime, getExceptUrls: getExceptUrls,getConfig: getConfig}function getDelayTime(){return config.delay;}function getExeptUrls(){return config.exceptUrls;}function getConfig(){return config;}};};var myDirectiveApp = angular.module('my.Directive',[]);myDirectiveApp.provider('myOverlayConfig', myOverlayConfig);myDirectiveApp.factory('httpInterceptor', httpInterceptor);myDirectiveApp.config('$httpProvider', httpProvider);myDirectiveApp.directive('myOverlay', ['$q', '$timeout', '$window', 'httpInceptor', 'myOverlayConfig', myOverlayDirective]);}()); 

在全局配置中:

(functioin(){angular.module('customersApp',['ngRoute', 'my.Directive']).config(['$routeProvider, 'myOverlayConfigProvider', funciton($routeProvider, myOverlayConfigProvider){...myOverlayConfigProvider.setDealy(100);myOverlayConfigProvider.setExceptionUrl({method: 'GET',url: ''});}]);}());

以上所述是小編給大家分享的AngualrJS中每次$http請求時的一個遮罩層Directive ,希望對大家有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产中文欧美精品| 成人av色在线观看| 久久五月天色综合| 98精品国产自产在线观看| 91精品久久久久久久| 欧美视频中文字幕在线| 国产精品久久久久久久av大片| 欧美日韩国产黄| 亚洲精品在线视频| 性色av一区二区三区在线观看| 欧美激情视频在线| 欧美—级a级欧美特级ar全黄| 亚洲欧美在线x视频| 欧美伊久线香蕉线新在线| 日本精品视频在线观看| 51ⅴ精品国产91久久久久久| 日韩免费高清在线观看| 久热精品在线视频| 色婷婷综合成人| 超碰91人人草人人干| 久久手机免费视频| 国产一区二区色| 啪一啪鲁一鲁2019在线视频| 成人网欧美在线视频| 亚洲乱码av中文一区二区| 欧美日韩国产一区二区| 一本一本久久a久久精品综合小说| 国产精品久久一区| 国产精品91免费在线| 亚洲va码欧洲m码| 国产精品扒开腿做爽爽爽男男| 欧美激情视频网站| www国产91| 中文字幕亚洲欧美在线| 日韩精品中文字| 亚洲性日韩精品一区二区| 欧美成人手机在线| www国产精品com| 精品视频久久久久久久| 一级做a爰片久久毛片美女图片| 亚洲老头同性xxxxx| 中文字幕亚洲欧美日韩高清| 中文字幕久久亚洲| 久久91精品国产91久久久| 中文欧美日本在线资源| 国产精品白嫩美女在线观看| 国产视频精品自拍| 国产不卡av在线免费观看| 亚洲аv电影天堂网| 一区二区av在线| 欧美激情亚洲激情| 懂色aⅴ精品一区二区三区蜜月| 亚洲美女精品成人在线视频| 久久深夜福利免费观看| 欧美激情亚洲激情| 欧美成人在线免费| 日韩中文在线中文网在线观看| 97精品国产97久久久久久| 欧美激情伊人电影| 在线观看精品自拍私拍| 日韩在线视频导航| 欧美第一黄色网| 91精品国产九九九久久久亚洲| 国产精品777| 亚洲精品成人久久久| 欧美激情一二三| 日韩精品在线电影| 成年无码av片在线| 久久久久国产精品免费| 97不卡在线视频| 欧美精品videosex牲欧美| 欧美成年人视频| 亚洲成人久久一区| 91精品国产综合久久香蕉最新版| 91高潮精品免费porn| 精品人伦一区二区三区蜜桃网站| 欧美成人网在线| 欧美特黄级在线| 欧美极品少妇全裸体| 久久久久久久91| 亚洲三级黄色在线观看| 亚洲国产精彩中文乱码av| 成人黄色免费网站在线观看| 亚洲精品久久久一区二区三区| 亚洲综合在线做性| 欧美一级片免费在线| 日韩久久免费视频| 久久视频国产精品免费视频在线| 久久久久久69| 亚洲第一区中文99精品| 日韩一级黄色av| 欧美亚洲日本黄色| 久久久久久欧美| 精品无人国产偷自产在线| 欧美性受xxxx黑人猛交| 久久久最新网址| 亚洲免费中文字幕| 国产精品亚洲第一区| 少妇高潮久久久久久潘金莲| 亚洲精品美女在线观看| 久久视频免费在线播放| 久久精品中文字幕| 欧美精品videossex88| 亚洲综合日韩中文字幕v在线| 国产美女直播视频一区| 欧美激情亚洲国产| 欧美国产精品人人做人人爱| 国产精品va在线播放我和闺蜜| 精品国产乱码久久久久久天美| 国产精品久久久久久久久久尿| 九九热视频这里只有精品| 久久亚洲精品小早川怜子66| 亚洲一区二区久久久| 中文亚洲视频在线| 亚洲人成伊人成综合网久久久| 久久久免费精品| 性色av一区二区三区红粉影视| 日韩成人久久久| 国产99在线|中文| 欧美在线亚洲一区| 91夜夜揉人人捏人人添红杏| 欧美极品少妇与黑人| 日韩av中文字幕在线免费观看| 亚洲美女精品久久| 一本色道久久综合狠狠躁篇的优点| 日韩欧美精品网站| 亚洲电影免费观看高清完整版在线| 91精品国产91久久| 国产美女扒开尿口久久久| 欧美黄色三级网站| 久久精品国产91精品亚洲| 亚洲最新av在线| 欧美激情国产高清| 日韩免费在线看| 亚洲国产精品小视频| 91久久精品国产91性色| 国产精品日日摸夜夜添夜夜av| 日日狠狠久久偷偷四色综合免费| 91高清在线免费观看| 欧美性xxxxx极品娇小| 国产精品视频99| 国产成人亚洲综合青青| 久久久中精品2020中文| 欧美电影免费观看| 日韩国产欧美精品在线| 欧美高清视频一区二区| 日韩欧美中文字幕在线观看| 欧美精品福利视频| 性色av一区二区三区红粉影视| 国产亚洲视频在线| 国产精品视频一区二区三区四| 亚洲伊人一本大道中文字幕| 亚洲自拍小视频| 日韩动漫免费观看电视剧高清| 日韩精品999| 亚洲va欧美va在线观看| 欧美激情乱人伦一区| 久久九九有精品国产23| 精品国产乱码久久久久久天美| 国产精品成熟老女人| 久久精品99无色码中文字幕| 亚洲第一偷拍网| 国产精品成人观看视频国产奇米| 久久99久国产精品黄毛片入口|