1

私は Highcharts-ng で作業しています https://github.com/pablojim/highcharts-ng

ソース コードに目を通すと、ブロードキャストに使用できる scope.$on のディレクティブでいくつかのことが行われていることがわかります。例えば...

scope.$on('highchartsng.reflow', function () {
  chart.reflow();
});

次に、コントローラーで、スコープでウォッチ関数を呼び出すことができます。

$scope.$watch("someElement", function(nV,oV){
  if(nV===oV) return;
  $scope.$broadcast('highchartsng.reflow');
});

これはうまく機能し、非常に理にかなっています。私が理解できないのは、ディレクティブに追加のものを追加できない理由です。たとえば、ディレクティブから .reflow() を呼び出すことができれば、同じように簡単に .zoomOut() を呼び出すことができるはずですよね?

// This doesn't work when I add it to the directive..
scope.$on('zoomOut', function() {
  chart.zoomOut();
});

// And broadcast the change from a scope in the controller
$scope.$watch('someElement', function(nV,oV){
    if(nV===oV) return;
    $scope.$broadcast('zoomOut');
});

これを機能させるために何ができますか?それができない場合、代わりにjQueryで制御するにはどうすればよいですか? (すべてをangularに依存するのではなく、jQueryにディレクティブの特定の側面を引き継がせることさえ可能ですか?)

4

1 に答える 1

2

それはうまくいくはずです。上記のコメントにあるように、正しいスコープで呼び出していることを確認してください。

jquery を使用してチャートのハンドルを取得し、必要なメソッドを呼び出すことができます。参照: DOM-Container を介して Highcharts チャートにアクセスするにはどうすればよいですか

これらのタイプのイベントの多くは、ページ上のすべてのグラフに適用され、非常に角ばった方法ではないように見えるため、追加するのに時間がかかります。

于 2014-04-10T16:58:14.770 に答える