2017-07-15 19 views
0

私はangularJsを使用してWebアプリケーションを作成していますが、ガントチャートを表示する必要があります。私はjquery-ganttプラグインを使用していますが、1つのグラフしか表示されていない場合でもうまく動作しますが、2つ以上表示したい場合でも同じソースがあるようです。AngularJS + Jquery Gantt - 複数のグラフ

<chronogramme source="$ctrl.firstSource"></chronogramme> 
<chronogramme source="$ctrl.secondSource"></chronogramme> 

($のCTRLが「controllerAs」と定義され、私のコントローラのための私の別名である)

たとえば、私は「secondSource」を更新したときに、最初のグラフは、同じものをあまりにも更新して表示されます二つ目。

複数のグラフを作成することは可能ですか?

おかげ


UPDATE: 問題はjQueryのガントのためのセレクタは、すべてシングルチャートに影響を与えるので、私は(それになります、それは他の人を助けことができれば、ここにこれを入れ、ここになければなりません) "chronogramme" directive:

app.directive("chronogramme", function(){ 
return { 
    restrict: 'E', 
    replace: true, 
      scope: { 
       source: '=source', 
       minScale: '=?minScale', 
       scale: '=?scale', 
       onItemClick: '=onItemClick', 
       onTitleClick: '=onTitleClick' 
      }, 
    template: '<div class="gantt"></div>', 
    link: function(scope, element, attrs){ 
       if (!scope.minScale) { scope.minScale = 'months'; } 
       if (!scope.scale) { scope.scale = 'months'; } 
       scope.$watch('source', function(){ 
        $(".gantt").gantt({ 
         source: scope.source, 
         navigate: "scroll", 
         minScale: scope.minScale, 
         scale: scope.scale, 
         itemsPerPage: 20, 
         waitText: "Chargement...", 
         months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], 
         dow: ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"], 
         scrollToToday: true, 
         onItemClick: function(data) { 
          scope.onItemClick(data); 
         }, 
         onTitleClick: function(data) { 
          scope.onTitleClick(data); 
         } 
        }); 
     }); 
    } 
}; 

});

+0

コードに起因する問題について質問するときに、人々が問題を再現するために使用できるコードを提供すれば、より良い回答が得られます。 [最小限の完全かつ検証可能なサンプルを作成する方法](https://stackoverflow.com/help/mcve)を参照してください。 – georgeawg

+0

AngularJSとjQueryを混在させると問題になることがあります。 [Angular Gantt](https://www.angular-gantt.com/)の使用を検討してください。 – georgeawg

+0

@georgeawg私は再現可能な例を作ることを考えましたが、それは私のコードに関連する技術的な問題ではなく、より概念的な問題であると信じています。 しかし、それが助けることができるなら、私は1つを作ろうとします 先端のおかげで、角ガントが問題を解決できるかどうかがわかります – Mazrog

答えて

0

ディレクティブは、プラグインを呼び出すためにクラスセレクタを使用している:

template: '<div class="gantt"></div>', 
link: function(scope, element, attrs){ 
      if (!scope.minScale) { scope.minScale = 'months'; } 
      if (!scope.scale) { scope.scale = 'months'; } 
      scope.$watch('source', function(){ 
       ̶$̶(̶"̶.̶g̶a̶n̶t̶t̶"̶)̶.̶g̶a̶n̶t̶t̶(̶{̶ 
       element.gantt({ 

代わりのクラスを持つすべての要素にプラグインを呼び出しますgantt、ディレクティブに固有の要素でそれを呼び出します。

また、指示文replaceも廃止予定です。指令がng-repeatで使用されると、問題を引き起こす可能性があります。

+0

ありがとう!これは期待どおりに動作します! より具体的なセレクタを作成するためにスコープにid attrsを追加しようとしましたが、動作しませんでした: – Mazrog

0

Angular Ganttを使用すると、明らかに問題が解決します。ライブラリ内のganttディレクティブのコードを確認することができます。これは非常に複雑で、jqueryバージョンのライブラリを使用してアプリケーションに作成する時間を費やす必要はありません。したがって、ganttディレクティブを使用すると、同じビューで複数のチャートを持つことができます。 (もちろん、独立したスコープで作成されています)。ここで、異なるデータセットと同じビュー上の2つのグラフの一例は次のとおりhttps://plnkr.co/edit/lyBH7ZnZ5PgThqe46YKk?p=preview

+0

アイデアをありがとう、しかし、プロジェクト全体がjqueryをたくさん使っていますので、私は可能な限り使用しようとしています。さらに、 "chronogramme"命令がひどく書かれているのを見ると、すべてのチャートを変更することは無関係になります。 しかし、とにかくありがとう! – Mazrog

関連する問題