我正在为当前项目学习AngularJS,我的网站大约有6到7页。我正在使用/#/导航方案,我想在XHR请求关闭模板时引入加载/请等待屏幕。
一旦下载了模板,我想调用一个页面转换,但我真的很难过如何构造它或执行它。
这可以简单地完成,还是有任何例子?
答案 0 :(得分:17)
您可以使用ngCloak
ngCloak指令用于阻止Angular html模板 来自浏览器的原始(未编译)短暂显示 在您的应用程序加载时表单。使用此指令可以避免 由html模板显示引起的不良闪烁效应。
CSS示例
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak
{
display: none;
}
#splash-page.ng-cloak /*<-- This has higher specificity so it can display a splash screen*/
{
display: block;
}
我们实际使用a promise tracker,可让您跟踪承诺,并在github
位于{{3}} 时显示有效的消息来自演示:
<div ng-show="pizzaTracker.active()" style="background:pink;">
<h1 style="text-align: center;">
Loading Pizza
<br />{{pizzaPercent() | number:2}}%
</h1>
</div>
并将$http
注册到承诺跟踪器
$http.get('flavor.json', { tracker: 'pizza' });
答案 1 :(得分:12)
我通过编写自定义HTTP拦截器解决了这个问题。以下是示例代码:
var app = angular.module('yourapp', ['loadingService']);
app.config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('myHttpInterceptor');
var spinnerFunction = function (data, headers) {
$('#loading').show();
return data;
};
$httpProvider.defaults.transformRequest.push(spinnerFunction);
});
angular.module('loadingService', [],
function ($provide) {
$provide.factory('myHttpInterceptor', function ($q, $window) {
return function (promise) {
return promise.then(function (response) {
$('#loading').hide();
return response;
}, function (response) {
$('#loading').hide();
return $q.reject(response);
});
};
});
});
注意:DOM中应该有一个ID为loading
的元素。