2016-07-30 8 views
1

Cytoscapejsを使用してネットワークグラフを作成しました。私はdivを再表示しようとしており、ユーザーがグラフの端をクリックした後でもっと多くのものを読み込む。プリントアウトを取得ん

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

</div> 

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

にconsole.logをしかしISN内部機能付き$ scope.showMe:Index.htmlと

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"; 

をまたに:

私は自分のコントローラに以下の持っています呼び出されていません。ただし、この節の外にある範囲をコントローラのメイン節に移動すると、機能します。

これを達成するための選択肢はありますか?

+0

「ng-click」を使用していない理由は何ですか? – Akis

+0

@Akis、それはCytoscape.jsライブラリによって生成されたエッジにイベントを追加するためです。ボタンのような普通のHTML要素にng-clickを追加する方法はわかっていますが、これは第三者のライブラリによって生成されたグラフなので、ノード/エッジがあるときに "ng-click"を追加する方法はわかりません自動的に生成されます。 –

+0

'$ scope.show = true;'の代わりに関数内にあるのであれば? – Akis

答えて

2

これは、$ scope値を更新するためにjqueryイベントを使用している場合によく発生します。手動で$スコープをtrigerする必要があります適用されます。

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

別の解決策は、角の$timeout

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

$scope.apply()more scope informationのためのマニュアルを参照してください使用することです。

+0

申し訳ありませんが、私はあなたを取得しません。もう少し説明してもらえますか? –

+0

scope.showMe関数は、$ scope.showMe()のように呼び出すと実行されます。または 'ng-click'でバインドした場合 – Akis

+0

あなたの例で関数が自動的に呼び出されない場合は、手動で呼び出す必要があります – Akis