2017-06-13 11 views
0

私は例えば、優先順位に基づいて、いくつかのグラフをロードする、AngularJSとd3jsで構築されたチャートジェネレータプラグインを持っている:AngularJSのロードスコープを遅延させるにはどうすればよいですか?

3つの優先レベルと6つのチャートがあります。

  • まず優先順位が:チャート#1 &チャート#5
  • 第優先:チャート#3
  • 第優先:チャート#2、チャート#4 &チャート#6

第2優先度チャートは、すべての第1優先度チャートが完全に読み込まれる前に表示することはできません。

スコープで遅延読み込みを使用するにはどうすればよいですか?ここで

は私のコードは次のとおりです。

コントローラ

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

githubで完全な例が見つかります: https://github.com/islamzatary/LegoCharts/ –

答えて

0

Serivceは、まあ、これは同じくらい遅延ロードの問題、それはタイミングの問題であるようではありません。

各レベルのリストを管理しているとします。

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

もちろん、1と5のデータを読み込む準備ができています。それぞれの読み込みが完了したら、配列のフラグを変更し、配列をチェックして、配列内のすべての要素がtrueに設定されているかどうかを確認します。そうであれば、次のレベルを読み込み、次に次のレベルを読み込みます。

これはこれを行う必要がありますが、あなたは多くのレベルで動作します。

関連する問題