刷新范围变量不适用于范围功能

Refreshing scope variable not working with scope function

我正在尝试使用 chartJS 及其包装器 angular-chart 更新我的图表数据。单击按钮时,它会在图表上添加数据,这没问题。

我有另一个事件,它在滚动事件后更新图表。这个调用效果很好,它调用了与之前完全相同的函数。但是我的 $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. 因为 setTimeout 在 angular 上下文之外运行,所以使用 $timeout 版本。
  2. 没有。您可以使用 $scope.$digest() 来检查当前范围的更改,而不是所有 $scope 树;