2017-06-13 55 views
0

我有AngularJS和d3js建立了一个图表生成插件,我想加载基于优先级排序一些图表,例如:如何在AngularJS中延迟加载范围?

有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; 
      } 
     }; 
    }); 
+0

你可以在github上找到完整的例子: https://github.com/islamzatary/LegoCharts/ –

回答

0

嗯,这是不是太大的延迟加载问题,因为它是一个时间问题。

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

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

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

这应该做到这一点,并为你有很多层次的工作。