2016-09-09 10 views
0

chartJSとラッパー角度チャートを使用して、自分のグラフのデータを更新しようとしています。ボタンをクリックすると、グラフにデータが追加されますが、問題はありません。スコープ関数を使用していないリフレッシュ範囲変数

私は、スクロールイベント後にチャートを更新する別のイベントがあります。呼び出しはうまく動作し、以前と同じ機能を呼び出します。しかし、私の$ scope.valuesDataは更新されません。次に、関数の後に$scope.$apply()を追加し、グラフ全体を適切な値で再描画します。

質問は以下のとおりです。

  1. は、私は、コントローラからの機能AddData関数を呼び出すときになぜ$ scope.chartValuesが更新されないん(と私はから関数を呼び出すとき、なぜ$ scope.chartValuesが更新されていますDOM)。おそらくデータバインディングの問題でしょうか?

  2. スコープ全体をリフレッシュするのではなく、特定のスコープ変数のみを更新する関数ですか?

マイコード:

HTML:

<ion-scroll zooming="false" direction="x" delegate-handle="scroller" on-scroll="getScrollPosition()" has-bouncing="true" scroll-event-interval="30000"> 
    <div class="chart_wrapper" ng-style="{ 'width': myWidth + '%' }"> 
     <canvas class="chart-bar" chart-data="data2" chart-labels="labels" chart-dataset-override="datasetOverride2" chart-options="options2" ng-click="goToMetrics()" "> 
     </canvas>  
</div> 
</ion-scroll> 

<button class="button button-small button-calm" ng-click="addValues()">Add Data </button> 

JS(コントローラ):

$scope.getScrollPosition = function(){ 
    var pos =    $ionicScrollDelegate.$getByHandle('scroller').getScrollPosition().left ; 
    if (pos == 0 && $scope.flag == -1){ 
    $scope.flag = 0; 
    //setTimeout($scope.addValues(), 1000); 
    $scope.addValues(); 
    } 
    if (pos < 0){ 
    $scope.flag = -1; 
    } 
}; 


    $scope.addValues = function(){ 
    console.log('add'); 
    // Retrieve values 
    var week = Graph.getData(); 
    var pp = $scope.chartData; 
    var mm = $scope.labels; 

    // Add values to the chart and update the chart width 
    var tmp = Graph.addBegin(pp, mm, week); 
    $scope.valuesData = tmp.values; 
    $scope.myWidth = $scope.myWidth + tmp.length * 4 ; 
}; 

すべてのヘルプ感謝

+1

これは多分関連していないかもしれませんが、あなたは '$ timeout'サービスを使うことができます。 –

+0

@PatrickFerreira関連していない、私は時間遅延機能を使用しない場合でも同じ問題が発生します – Jibeee

答えて

1
  1. ので、 setTimeoutは角度コンテキスト外で実行され、$ timeoutバージョンを使用します。
  2. Nope。 $ scope。$ digest()を使って、現在のスコープからの変更をチェックすることができます。
+0

ありがとう、あなたの答えです。私は私の質問を更新しました。タイムアウト関数(setTimeoutや$ timeout)を使わなくても同じ問題が発生します。 – Jibeee

+0

同じアンサー - スクロールの外側の角度のコンテキストと呼ばれる。 $ scope、$ apply、$ timeount、$ digestのいずれかでなければなりません。角はラップされていないDOMイベントと相互に作用することはできません –

+0

大丈夫です。この問題を解決するための解決策はありますか? – Jibeee

関連する問題