Javascript 为什么angular chartjs update在$timeout回调中工作,而在异步回调中不工作?
我的页面上有一个角度图JS条形图: 我用一些数据初始化它: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
$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
函数在其中呈现每个组件,该函数将模板和范围作为参数。因此,上面的代码正在特定组件的控制器函数中运行。