我想在我的应用程序的第一次加载时显示一个微调器:https://devart.withgoogle.com/
我试图通过服务模块这样做:
angular.module('InitialLoad', [])
.config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('myHttpInterceptor');
var spinnerFunction = function (data, headersGetter) {
$('#loading').fadeIn();
return data;
};
$httpProvider.defaults.transformRequest.push(spinnerFunction);
})
.factory('myHttpInterceptor', function ($q, $window) {
return function (promise) {
return promise.then(function (response) {
$('#loading').fadeOut(function(){
$(this).remove();
});
return response;
}, function (response) {
$('#loading').fadeOut(function(){
$(this).remove();
});
return $q.reject(response);
});
};
});
但是这有很多问题......首先是这不会监听它收听每个请求的第一个负载。它也没有显示和隐藏加载,就像在DevArt上完成它一样优雅,我使用jQuery来隐藏和显示加载微调器,而不是使用Angular Animate。
有人可以帮忙吗?澄清这是INITIAL app加载!而不是在后续请求中显示微调器。我使用它:https://github.com/chieffancypants/angular-loading-bar但是我想展示应用启动的不同之处。
答案 0 :(得分:10)
如果您想在AngularJS加载时隐藏您的应用程序,则默认您的微调器使用纯HTML显示,并使用ng-cloak隐藏应用程序的角度部分。
https://docs.angularjs.org/api/ng/directive/ngCloak
加载应用后,您可以使用ng-hide / ng-show关闭微调器。
<div ng-controller="TopController">
<div class="spinner" ng-hide="appLoaded"/>
<div ng-cloak ng-view>
... All Angular view giblets go here...
</div>
</div>
这是一个有效的例子:
答案 1 :(得分:2)
我不会尝试使用拦截器执行此操作。使用Controller可以很容易地做到这一点:
app.controller("TopController", [ "$scope", "SomeService", function($scope, SomeService) {
$scope.showAppLoader = false;
$scope.loadApp = function() {
$scope.showAppLoader = true;
SomeService.doSomething().success( function(result) {
$scope.showAppLoader = false;
});
};
$scope.loadApp();
}]);
然后是观点:
<div ng-controller="TopController">
<div class="spinner" ng-show="showAppLoader"></div>
<div ng-hide="showAppLoader" ng-view"></div>
</div>
其余部分仅仅是CSS中的练习。