2016-07-22 6 views
3

Ich verwende eckige und jquery float, um ein Diagramm zu zeichnen. Graph ist ein Canvas-Element.OnClick `ngClick` von Icon übertragen wir` `refresh`` Event. Aber es funktioniert nicht

Ich möchte eine Leinwand bei Klick auf ein Symbol neu zeichnen .. angeklickt Handler ist toggleSideMenu. OnClick ngClick des Symbols sind wir broadcasting der refresh Ereignis. Aber es funktioniert nicht.

Wenn ich in der Funktion setzen debbugger wird es funktioniert ..

Mein JS Code-

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

Statt des Gebens -

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

ich gegeben habe

$rootScope.$broadcast("refresh"); 

Ich habe Listener als o-

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

     }); 

Aber es funktioniert nicht. Bitte helfen Sie mir ..

+2

Mögliches Duplikat von [$ rootScope. $ Broadcast funktioniert nicht] (http://StackOverflow.com/questions/35644084/rootscope-broadcast-not-working) – ngrj

Antwort

0

Wenn Sie $ Broadcast oder $ emit. Sie sollten $ rootScope. $ On haben, um dieses Ereignis anzuhören. Für mehr bitte folgen Sie dem untenstehenden Link. Bitte beachten Sie, dass Sie im Stapel über den Fluss suchen müssen, bevor Sie eine Frage stellen.

$rootScope.$broadcast not working

+0

Beachten Sie, dass OP Broadcasts auf $ rootScope, also sollte ein $ haben rootScope. $ on. – Guinn

0

Sie übertragen auf $ rootScope und Ihre Zuhörer auf $ scope. Dies sind zwei verschiedene "Bereiche" und können nicht auf die Sendungen des jeweils anderen hören. Sofern Sie nicht möchten, dass ein anderer Controller das Aktualisierungsereignis abfängt, schlage ich vor, die Übertragung im Bereich $ zu belassen. Wie:

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

Aber ansonsten sollte Ihr Listener auch $ rootScope sein.