2016-07-30 10 views
1

Ich habe ein Netzwerk-Diagramm mit Cytoscapejs erstellt. Ich versuche, ein div einzublenden und weitere Dinge zu laden, nachdem der Benutzer auf die Kante des Diagramms geklickt hat.

Ich habe folgend in meinem Controller:

CytoscapeService.getGraph().on('tap', 'edge[id = "123"]', function (event) { 

console.log("Hi") 
//Above console printout works. 

    //The below does not work on index.html 
    $scope.testMessage = "Hello World"; 
    $scope.showMe = function() { 
    $scope.show = true; 
    } 

    $scope.showMe(); 

}); 

// This works though. 
//$scope.testMessage = "Hi from outside"; 

Und in Index.HTML:

<div ng-controller="MainCtrl" class="container" ng-show="show"> 

</div> 

<div ng-controller="MainCtrl"> 
    {{testMessage}} 
</div> 

Die console.log Druck bekommt, aber der $ scope.showMe mit Funktion innerhalb isn Ich werde nicht angerufen. Wenn ich jedoch den Bereich außerhalb dieser Klausel in den Hauptsatz des Controllers verschiebe, funktioniert er.

Gibt es Alternativen, wie ich das erreichen kann?

+0

ein Grund, warum Sie nicht 'ng-click' verwenden? – Akis

+0

@Akis, liegt daran, dass ich ein Ereignis auf eine von der Bibliothek Cytoscape.js generierte Kante anlege. Ich weiß, wie man ng-click auf ein gewöhnliches HTML-Element wie Knopf hinzufügt, aber dies ist ein Graph, der von einer Third-Party-Bibliothek erzeugt wird, daher weiß ich nicht, wie man einen "ng-click" fügt, wenn die Knoten/Kanten sind automatisch erzeugt. –

+0

Wenn Sie nur '$ scope.show = true;' statt in der Funktion haben? – Akis

Antwort

2

Dies ist bei angular üblich, wenn Sie jquery-Ereignisse zum Aktualisieren eines $ scope-Werts verwenden. Sie werden von Hand müssen einen $ Umfang triger gelten:

$scope.$apply(function(){ 
    $scope.show = true; 
}); 

Eine andere Lösung Angular der $timeout

$timeout(function() { 
    $scope.show = true; 
}); 

finden Sie in der Dokumentation für $scope.apply() und more scope information zu verwenden wäre.

+0

Sorry, ich verstehe dich nicht. Macht es Ihnen etwas mehr zu erklären? –

+0

Ihre scope.showMe-Funktion wird nur ausgeführt, wenn Sie es so nennen $ scope.showMe(); oder wenn Sie es mit einem 'ng-klick' verbinden – Akis

+0

wird die Funktion in Ihrem Beispiel nicht automatisch aufgerufen, Sie müssen es manuell aufrufen – Akis