【问题标题】:Angular and preloader for an ajax template用于 ajax 模板的 Angular 和预加载器
【发布时间】:2016-06-01 22:57:40
【问题描述】:

我有一个带有多个模板的仪表板。

在其中一个模板中,我有一个简单的列表。我在我的li 上使用ng-repeat,这样我就可以保持我的列表动态。 但事情是这样的 -

由于我使用$http 获取此列表的数据,因此可能有一两秒钟的空列表。

一个很好的解决方案是默认为我的列表添加一个预加载器,但是你建议如何添加逻辑呢?最简单的方法是像这样添加它:

$http({
    method: 'GET',
    url: './data/websites.json'
}).then(function successCallback(response) {
    // hide preloader, etc
});

这会是正确的方法吗?

另外 - 是否可以控制模板转换?例如,当用户离开页面时,我想显示预加载器 X 毫秒,然后才移动到请求的页面

【问题讨论】:

  • 最简单的是ng-show 和一个范围变量。在then 中将其设置为 false。我喜欢的一个模块是cg-busy。只需将 $http 承诺传递给它,它就会完成剩下的所有工作
  • 有趣。我会试试的!

标签: angularjs ajax preloader


【解决方案1】:

最好有一个指令为你做所有事情:

angular.module('directive.loading', [])

    .directive('loading',   ['$http' ,function ($http)
    {
        return {
            restrict: 'A',
            link: function (scope, elm, attrs)
            {
                scope.isLoading = function () {
                    return $http.pendingRequests.length > 0;
                };

                scope.$watch(scope.isLoading, function (v)
                {
                    if(v){
                        elm.show();
                    }else{
                        elm.hide();
                    }
                });
            }
        };

    }]);

有了这个指令,你需要做的就是给任何加载动画元素一个'loading'属性:

<div class="loading-spiner-holder" data-loading ><div class="loading-spiner"><img src="..." /></div></div>

【讨论】:

  • 我不得不稍微调整一下,但总的来说这是一个很好的答案。
  • 不错不错。如果它对您有用,您可以接受答案:) 或喜欢它:)
猜你喜欢
  • 2017-04-10
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 2015-10-29
  • 2017-12-21
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
相关资源
最近更新 更多