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

Javascript 如何在AngularJS中延迟加载范围?,javascript,angularjs,charts,lazy-loading,Javascript,Angularjs,Charts,Lazy Loading,我有一个用AngularJS和d3js构建的图表生成器插件,我想根据优先级排序加载一些图表,例如: 共有6个图表,具有3个优先级: 第一优先级:图表1和图表5 第二优先事项:图表3 第三优先级:图表2、图表4和图表6 请注意,在所有第一优先级图表完全加载之前,无法查看第二优先级图表 如何在我的作用域中使用延迟加载 这是我的密码: 控制器 ngCharts.controller('WgListMixed', function ($rootScope, $scope, $http, $sce,

我有一个用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;
            });
        });
});
服务

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;
            }
        };
    });
ngCharts.service('SharedDateScopes',function($rootScope,$http,$q){
返回{
getWidgetMixed:函数(日期范围、阶段){
var数据范围=;
if(日期范围的类型!=“未定义”){
var dataRange=日期范围;
}
var date_range_attr=“&date_range=“+dataRange+”;
如果(代码名类型==“未定义”){
var date_range_attr=“”;
}
var defer=$q.defer();
$http.get('/byt_reporting_widgets_manager?stage=mixed'+date_range_attr+'&widgets=')。成功(函数(数据){
延迟解析(数据);
            });
回报、承诺;
}
};
});

这不是一个延迟加载问题,而是一个时间问题

假设您为每个级别维护一个列表

var firstPriority=[{ID:1,loaded:false},{ID:5,loaded:false}]

当然,您可以开始加载1和5的数据。当每个元素都完成加载后,您可以更改数组中的标志,然后检查数组,查看数组中的所有元素现在是否都设置为true。如果是,则开始加载下一级,然后加载下一级


这应该可以做到,并且适用于您的多个级别。

您可以在github上找到完整的示例: