我有一个使用 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;
}
};
});
这与其说是一个延迟加载问题,不如说是一个计时问题。
假设您为每个级别维护一个列表。
var firstPriority = [ {ID : 1, loaded : false} ,{ID : 5, loaded : false} ] ;
当然,您开始加载 1 和 5 的数据并承诺。当每个元素完成加载时,您更改数组中的标志,然后检查数组以查看数组中的所有元素现在是否都设置为 true。如果是,那么您开始加载下一个级别,然后是下一个级别。
这应该可以做到,并且适用于您拥有的多个级别。