2017-06-13 54 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。如果他們是那麼你開始加載下一個級別,然後下一個級別。

這應該做到這一點,併爲你有很多層次的工作。