Angular JS加载屏幕和页面动画

时间:2013-05-28 09:55:12

标签: javascript html5 angularjs

我正在为当前项目学习AngularJS,我的网站大约有6到7页。我正在使用/#/导航方案,我想在XHR请求关闭模板时引入加载/请等待屏幕。

一旦下载了模板,我想调用一个页面转换,但我真的很难过如何构造它或执行它。

这可以简单地完成,还是有任何例子?

2 个答案:

答案 0 :(得分:17)

在AngularJs引导时显示加载消息

您可以使用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的元素。