繁体   English   中英

如何在AngularJS中延迟加载范围?

[英]How do I lazy load scope in AngularJS?

我有一个使用AngularJS和d3js构建的图表生成器插件,我想基于优先级排序加载一些图表,例如:

有6个图表,具有3个优先级:

  • 第一要务:图表1和图表5
  • 第二优先级:图表3
  • 第三优先级:图表2,图表4和图表6

请注意,在所有第一个优先级图表都完全加载之前,您无法查看第二个优先级图表。

如何在示波器上使用延迟加载?

这是我的代码:

调节器

ngCharts.controller('WgListMixed', function ($rootScope, $scope, $http, $sce, $timeout, $compile, SharedDateScopes) {
        SharedDateScopes.getWidgetMixed(2).then(function(data_promised) {
            $rootScope.wgMixLists = data_promised;
            angular.forEach($rootScope.wgMixLists, function(widget) {
                var scope_name = widget.wg_id;
                var scope_name_v = widget.wg_id+"_v";
                $rootScope[scope_name] = widget.data[0];
                $rootScope[scope_name_v] = widget.data;
            });
        });
});

Serivce

ngCharts.service('SharedDateScopes', function($rootScope, $http, $q) {
        return {
            getWidgetMixed: function(dateRanges,stages) {
                var dataRange = <%=$data_range%>;
                if(typeof dateRanges !=="undefined") {
                    var dataRange = dateRanges;
                }
                var date_range_attr = "&date_range="+dataRange+"";
                if (typeof codename == "undefined") {
                    var date_range_attr = "";
                }
                var defer = $q.defer();
                $http.get('<%=[byt_control_root]%>/byt_reporting_widgets_manager?stage=mixed'+date_range_attr+'&widgets=<%=$bayt_mixed_widget%>').success(function (datas) {
                    defer.resolve(datas);
                });
                return defer.promise;
            }
        };
    });

好吧,这不只是一个延迟加载问题,而是一个计时问题。

想象一下,您维护了每个级别的列表。

var firstPriority = [{ID:1,已加载:false},{ID:5,已加载:false}];

您当然会带着承诺开始加载1和5的数据。 加载完毕后,您可以更改数组中的标志,然后检查数组以查看数组中的所有元素现在是否都设置为true。 如果它们是,那么您就开始加载下一个级别,然后开始下一个级别。

这应该可以做到,并且可以为您提供许多级别的服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM