加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

配合angularjs中interceptor一劳永逸的加载$ionicloading的方法

发布时间:2020-12-17 09:37:27 所属栏目:安全 来源:网络整理
导读:在我们日常的项目开发中,每当页面需要和服务端存在交互的时候,为了界面的友好,我们都会在界面中给个loading的加载图标,当从服务端获取到数据或者已经把本地数据送到服务端并且得到相应的回应的时候我们就会隐藏刚刚的加载图标。 但是之前我们通常的做法

在我们日常的项目开发中,每当页面需要和服务端存在交互的时候,为了界面的友好,我们都会在界面中给个loading的加载图标,当从服务端获取到数据或者已经把本地数据送到服务端并且得到相应的回应的时候我们就会隐藏刚刚的加载图标。

但是之前我们通常的做法都是在每一页面对应的controller中注入$ionicLoading,当发送请求的时候调用$ionicLoading.show();当完成与服务端的交互的时候就将loading隐藏掉,调用$ionicLoading.hide()方法,但是这样真的很麻烦,代码的重复度太高了,几乎每个页面都会不停的重复的写着这两行代码,所以这里我找到了一个一劳永逸的方法免去大家以后每个页面的loading的编写

因为最近项目比较忙,时间不多,这里 就不做过多介绍,直接上方法:

方法一:利用广播(因为拦截器中不能够注入$ionicLoading)

代码如下:

varapp=angular.module('ionicApp',['ionic'])

app.config(function($httpProvider){
$httpProvider.interceptors.push(function($rootScope){
return{
request:function(config){
$rootScope.$broadcast('loading:show')
returnconfig
},response:function(response){
$rootScope.$broadcast('loading:hide')
returnresponse
}
}
})
})

app.run(function($rootScope,$ionicLoading){
$rootScope.$on('loading:show',function(){
$ionicLoading.show({template:'foo'})
})

$rootScope.$on('loading:hide',function(){
$ionicLoading.hide()
})
})

app.controller('MainCtrl',function($http,$ionicLoading){
var_this=this

$http.jsonp('http://api.openbeerdatabase.com/v1/breweries.json?callback=JSON_CALLBACK').then(function(result){
_this.breweries=result.data.breweries
})
})

代码比较简单,这里就不做过多介绍了。

方法二:利用拦截器中$injector,正式我现在项目中用的方法。

拦截器中虽然不能够注入别的东西,但是有个$injector有个get方法,可以获取到别的服务,代码非常简单:

request:function(config){
if(config.url.toString().indexOf('http://')===0){
$injector.get('$ionicLoading').show({
template:'<div><svgclass="circular"><circler="20"class="path"cx="50"cy="50"fill="none"stroke-width="2"stroke-miterlimit="10"></circle></svg>'
});
}
config.headers=config.headers||{};
vartoken=localStorageService.get('token');

if(token&&token.expires_at&&token.expires_at>newDate().getTime()){
config.headers.Authorization='Bearer'+token.access_token;
}

returnconfig;
}

在response中隐藏掉loading,注意这里无论是正确的返回还是错误的返回都必须隐藏

因为错误的返回后面各种操作代码比较多,这里就粘贴下正确的返回的代码:

if(response.config.url.indexOf('===0){
$injector.get('$ionicLoading').hide();
}
returnresponse;
}

其实也就是那一句hide,在项目我是用第二种方法的,比较推荐。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读