Javascript 为什么angular chartjs update在$timeout回调中工作,而在异步回调中不工作?

Javascript 为什么angular chartjs update在$timeout回调中工作,而在异步回调中不工作?,javascript,angularjs,chart.js,Javascript,Angularjs,Chart.js,我的页面上有一个角度图JS条形图: 我用一些数据初始化它: $scope.data= [ [1,2,3,4] ]; $scope.labels = [1,2,3,4]; $scope.series = ['field1']; 如果我在几秒钟后添加一个数据点,图表就会更新: $timeout(function() { console.log('timeout'); $scope.labels.push(''); $scope.data[0].push(9); }, 2

我的页面上有一个角度图JS条形图:

我用一些数据初始化它:

$scope.data= [
  [1,2,3,4]
];
$scope.labels = [1,2,3,4];
$scope.series = ['field1'];
如果我在几秒钟后添加一个数据点,图表就会更新:

$timeout(function() {
    console.log('timeout');
    $scope.labels.push('');
    $scope.data[0].push(9);
}, 2000);

//the data gains a 9, and the chart updates and now has 5 bars,
//rather than 4.
但是,如果我尝试在异步回调中执行相同的操作,就会出现严重错误,图表无法完全呈现

$http.get( _url_ ).then(function(res) {
     $scope.labels.push('');
     $scope.data[0].push(9);
});
//perhaps something goes wrong behind the scenes with $scope.data
//because the chart wont load now
为什么在回调函数中为ajax请求做一些事情会让图表不高兴


Edit:,但由于某些原因,它在plunker中运行良好,但在实际应用程序中不起作用。

我没有看到任何需要摘要调用的内容。。。你能把这个放到提琴里吗?另外,我试着打电话给$scope。$apply,它说了一些类似于“已经消化”的话@Nix我创建了一个plunker。真的很奇怪:它在plunker中工作,但在实际应用程序中不起作用。还有其他一些东西在起作用。。。假设没有js错误?你正在初始化所有的东西,就像你在小提琴里做的一样?好吧,页面是一个组件的阶段,在这个阶段中,其他组件可以拖放到这个阶段。通过使用
compile
函数在其中呈现每个组件,该函数将模板和范围作为参数。因此,上面的代码正在特定组件的控制器函数中运行。