2016-09-09 4 views
0

chartJS 및 래퍼 각도 차트를 사용하여 내 차트의 데이터를 업데이트하려고합니다. 버튼을 클릭하면 차트에 데이터가 추가되지만 문제는 없습니다.범위 기능을 사용하여 새로 고치는 범위 변수가 작동하지 않습니다.

다른 이벤트가 있는데,이 이벤트는 스크롤 이벤트 이후에 차트를 업데이트합니다. 이 호출은 훌륭하게 작동하며 이전과 똑같은 함수를 호출합니다. 그러나 내 $ scope.valuesData는 업데이트되지 않습니다. 그런 다음 함수 뒤에 $scope.$apply()을 추가하고 올바른 값으로 전체 차트를 다시 그립니다.

질문은 다음과 같습니다

내가 컨트롤러에서 함수는, addData 전화 (그리고 나는에서 함수를 호출 할 때 왜 scope.chartValues가 업데이트 $ 때 왜 $의 scope.chartValues가 업데이트되지 않습니다
  1. 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()를 사용하여 모든 $ scope 트리가 아닌 현재 범위의 변경 사항을 확인할 수 있습니다.
+0

답장을 보내 주셔서 감사합니다. 내 질문을 업데이트, 같은 문제가 너무 시간 초과 기능 (setTimeout 또는 $ timeout) 사용하지 않고 발생합니다. – Jibeee

+0

동일한 각도 - 외부 각도 컨텍스트라고하는 스크롤입니다. $ scope, $ apply 또는 $ timeount 또는 $ digest를 사용해야합니다. 각도가 포장 된 DOM 이벤트와 상호 작용할 수 없습니다. –

+0

괜찮습니다. 이 문제를 해결할 수있는 해결책은 무엇입니까? – Jibeee