AngularJS:如何显示预加载或加载直到页面完全加载?

2024-04-25

我有一个图像库网站,我在控制器中以 json 格式从数据库获取所有图像和图像相关数据,然后使用 ng-repeat 将它们与 html 绑定。现在,数据加载较早,但图像加载较晚,因此图像比较分散。怎么解决这个问题。我不想使用 setTimeOut。

示例代码如下:-

<!DOCTYPE html>
<html lang="en" class="no-js" ng-app="cps">
<body ng-controller="CPSController">
<div>
<li ng-repeat="image in images" class="shown">
                <a id="{{image.imageid}}" ng-click="openimage(image.imageid)">
                    <img idx="id-thumb-{{$index}}" ng-src="/imagedisplay/{{image.imageid}}" alt="" style="">
                    <div class="meta_info">
                        <h3>{{image.imagename}}.</h3>
                        <div class="callto">
                            <div class="actions">
                                <span><img src="img/artist.svg" alt="">{{image.ownername}}</span>
                                <span><img src="img/likes.svg" alt="">{{image.likes}}</span>
                                <span><img src="img/views_small.svg" alt="">{{image.views}}</span>
                            </div>
                            <div class="category">
                                Art Category
                            </div>
                        </div>
                    </div>
                </a>
            </li>

</div>
</body>
</html>

<script>

    var cps = angular.module('cps', []);
    cps.controller('CPSController', function($scope, $http, $compile){
        $scope.products = [];
        $http.get("/alldata/").success(function(data){
             if(data != "null")
             {
               for(i=data.length-1; i>=0; i--){
                 $scope.products.push(data[i]);
                }
                $scope.sendOrder('views', 'likes', 'timestamp', 2);
              }else{
                //$('#noImages').show();
              }

           /*setTimeout(function(){
                $("[idx^='id-thumb']").show();
            });*/
        });
     });
</script>

# UPDATE [August 2017]

与下面相同的答案,除了我们可以使用load事件于window代替DOMContentLoaded on document。这将确保所有资产(例如图像)window are loaded.

window.addEventListener("load", function(event) {
    ...
})

我们不必强迫 Angular 在哪里vanilla javascript就够了。这就是它对我的作用AngularJS project

将其添加到 body 标签中。一旦 HTML 内容加载,它将通过脚本标签被删除

<div id="page-loading">
    <img style="display:block; margin:0 auto;" src="styles/img/page-loading.gif">
</div>

script标记在图像的正下方。

<script type="text/javascript">
    document.addEventListener("DOMContentLoaded", function(event) {
        /*VANILLA JAVASCRIPT*/
        var element = document.getElementById("page-loading");
        element.parentNode.removeChild(element);
        /* OR WITH jQuery*/
        $('#page-loading')
            .fadeOut('slow');
    });
</script>

DOMContentLoaded event将确保callback当所有的images,fonts,js and other assets已加载。

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS:如何显示预加载或加载直到页面完全加载? 的相关文章