2016-07-22 10 views
3

私はグラフを描画するために角度とjqueryのフロートを使用しています。グラフはキャンバス要素です。アイコンのOnClick `ngClick`は、` refresh`イベントを `broadcast`しています。しかし、それは動作していません

いくつかのアイコンをクリックしてキャンバスを再描画したいと考えています。 クリックハンドラーはtoggleSideMenuです。アイコンのOnClick ngClickは、broadcastingrefreshイベントです。しかし、それは動作しません。

私はそれが動作する関数内debbugger置く場合...

私のJSコード -

this.toggleSideMenu = function() { 
    // this.setSideMenuState(!this.sidemenu); 
    $("#sidemenu-canvas").toggleClass("toggled"); 
    $timeout(function() { 
     $rootScope.$broadcast("refresh"); 
    }, 50); 
    $timeout(function() { 
     $rootScope.$broadcast("render"); 
    }, 50); 
    }; 

の代わりに与えて - 私が与えている

$timeout(function() { 
     $rootScope.$broadcast("refresh"); 
    }, 50); 

$rootScope.$broadcast("refresh"); 

私はlistner alsを持っていますo-

$scope.$on('refresh', function() { 
     if(!$scope.isDRPDisabled) { 
      $scope.refresh(); 

     }); 

しかし、それは動作しません。 助けてください。

+2

[$ rootScope。$ broadcast not working]の複製が可能です。(http://stackoverflow.com/questions/35644084/rootscope-broadcast-not-working) – ngrj

答えて

0

$ broadcastまたは$ emitを使用すると、そのイベントを聞くには、$ rootScope。$ onが必要です。詳細は以下のリンクをご覧ください。質問を投稿する前に、スタックオーバーで検索することを検討してください。

$rootScope.$broadcast not working

+0

OPは$ rootScopeでブロードキャストされるため、$ rootScope。$がオンです。 – Guinn

0

あなたは$ rootScopeで放送され、リスナーは$スコープです。これらは2つの異なる「スコープ」であり、お互いの放送を聞くことはできません。別のコントローラにリフレッシュイベントをキャッチさせたくない場合は、$スコープ内でブロードキャストを維持することをお勧めします。 Like:

this.toggleSideMenu = function() { 
    // this.setSideMenuState(!this.sidemenu); 
    $("#sidemenu-canvas").toggleClass("toggled"); 
    $timeout(function() { 
     $scope.$broadcast("refresh"); 
    }, 50); 
    $timeout(function() { 
     $scope.$broadcast("render"); 
    }, 50); 
}; 

しかし、そうでない場合は、リスナーも$ rootScopeにする必要があります。

関連する問題