从观察者填充 Angular 图表 - 奇怪的行为
Populate Angular Chart from watcher - Weird behaviour
我的问题是 angular-chart 在从工厂广播更新后没有显示数据。我正在像这样设置标签和数据,根据用户输入,这可能会改变:
// Listener function in controller, receives data from factory
$scope.$on("New Data", function(event, data, ID) {
processTripData(data, ID).then(function(result) {
setTypeDistributionBar(result).then(function(r) {
buildTypeDistributionBar(r.data, r.labels);
})
})
})
var buildTypeDistributionBar = function(data, labels) {
$scope.distributionLabels = labels;
$scope.distributionData = [data];
}
问题在于,这只会在第二次调用 buildTypeDistributionBar
后更新图表。所以这个图表总是落后于用户输入的 1 个查询。
问:为什么第二次调用才显示图表?我怎样才能实现它立即更新?
更新:我创建了一个 fiddle 来演示这一点,它显示的行为与我的不同,但相似。
我发现这可能是一个与 scope
相关的问题,this question 的答案将我引向了以下内容,这是可行的。基本上 $scope.$apply();
强制摘要。现在图表不再落后一步:
var buildTypeDistributionBar = function(data, labels) {
$scope.distributionLabels = labels;
$scope.distributionData = [data];
$scope.$apply();
}
我的问题是 angular-chart 在从工厂广播更新后没有显示数据。我正在像这样设置标签和数据,根据用户输入,这可能会改变:
// Listener function in controller, receives data from factory
$scope.$on("New Data", function(event, data, ID) {
processTripData(data, ID).then(function(result) {
setTypeDistributionBar(result).then(function(r) {
buildTypeDistributionBar(r.data, r.labels);
})
})
})
var buildTypeDistributionBar = function(data, labels) {
$scope.distributionLabels = labels;
$scope.distributionData = [data];
}
问题在于,这只会在第二次调用 buildTypeDistributionBar
后更新图表。所以这个图表总是落后于用户输入的 1 个查询。
问:为什么第二次调用才显示图表?我怎样才能实现它立即更新?
更新:我创建了一个 fiddle 来演示这一点,它显示的行为与我的不同,但相似。
我发现这可能是一个与 scope
相关的问题,this question 的答案将我引向了以下内容,这是可行的。基本上 $scope.$apply();
强制摘要。现在图表不再落后一步:
var buildTypeDistributionBar = function(data, labels) {
$scope.distributionLabels = labels;
$scope.distributionData = [data];
$scope.$apply();
}