Flot js and Angular Issue
Flot js and Angular Issue
我正在使用流程图来绘制仪表板上的一些点,并且遇到了一些麻烦。
首先,仪表板是有角度的,所以我设置了一个指令来初始化flot,它似乎正在工作。图表加载并绘制可用的第一组数据。当我尝试更新用于生成图形的数据时,问题就出现了。
当我这样做时,数据更新,但只显示前3个点,它不显示结果中的完整数据集-只有前3个图表值。检索到的JSON结果集的长度可以不同(返回的数据基于在其他地方设置的日期值,并由updateStats函数请求)。我需要它做的是,动态地绘制所有数据而不仅仅是数据集中的前几行。
我不知道为什么它会这样做,我已经放弃了把我的头撞在桌子上。如有任何帮助,我将不胜感激。
这是我的代码(请忽略控制台)。我一直在尝试用各种方式调试这个): 指令.directive('flotChart', function () {
return {
restrict: 'AE',
scope: {
data: '=flotData',
options: '=flotOptions',
plothover: '&plotHover',
plotclick: '&plotClick'
},
link: function (scope, element, attr) {
var plot = $.plot($(element), scope.data, scope.options);
$(element).bind('plothover', function (event, position, item) {
scope.plothover( {
event: event,
position: position,
item: item
});
});
$(element).bind('plotclick', function (event, position, item) {
scope.plotclick( {
event: event,
position: position,
item: item
});
});
scope.$watch('data', function (newVal, oldVal) {
console.log("DATA WATCH");
plot.setData(newVal);
plot.draw();
});
scope.$watch('options', function (newVal, oldVal) {
plot = $.plot($(element), scope.data, newVal);
}, true);
}
}
})控制器
.controller('DashboardController', ['$scope','$http', function ($scope,$http) {
//删除一段与对话无关的代码
$scope.plotStatsData = [{data:[[1,500],[2,250],[3,150]], label:'TEST'}];
$scope.init = function() {
$scope.updateStats();
}
$scope.updateStats = function() {
$http.post("/admin/dashboard/loaddata",{start_date: $scope.drp_start, end_date: $scope.drp_end}).success(function(response){
$scope.totals = response.summary;
//console.log(response.dataset);
$scope.plotPoints(response.dataset);
});
};
$scope.plotPoints = function(data) {
var layer1 = {data:[],label:'Users'};
var count = 1;
if (confirm("Clear it?"))
$scope.plotStatsData = [];
for (var i=1; i < data.length; i++)
layer1.data.push([i,parseInt(data[i-1].users)]);
console.log(layer1);
$scope.plotStatsData.push(layer1);
}
$scope.plotStatsOptions = {
series: {
lines: {
show: true,
lineWidth: 1.5,
fill: 0.1
},
points: {
show: true
},
shadowSize: 0
},
grid: {
labelMargin: 10,
hoverable: true,
clickable: true,
borderWidth: 0
},
tooltip: true,
tooltipOpts: {
defaultTheme: false,
content: "View Count: %y"
},
colors: ["#b3bcc7"],
xaxis: {
tickColor: 'transparent',
tickDecimals: 0,
autoscaleMargin: 0,
font: {
color: 'rgba(0,0,0,0.4)',
size: 11
}
},
yaxis: {
ticks: 4,
tickDecimals: 0,
tickColor: "rgba(0,0,0,0.04)",
font: {
color: 'rgba(0,0,0,0.4)',
size: 11
},
tickFormatter: function (val, axis) {
if (val>999) {return (val/1000) + "K";} else {return val;}
}
},
legend : {
labelBoxBorderColor: 'transparent'
}
};
}])
HTML <div flot-chart style="width: 100%; height:250px"
data-flot-data="plotStatsData"
data-flot-options="plotStatsOptions"
></div>
您的初始数据只有三个数据点:
$scope.plotStatsData = [{data:[[1,500],[2,250],[3,150]], label:'TEST'}];
然后更新数据,但只对现有的网格/轴进行重绘。
插入对setupGrid()的调用,它应该可以工作:
scope.$watch('data', function (newVal, oldVal) {
console.log("DATA WATCH");
plot.setData(newVal);
plot.setupGrid();
plot.draw();
});
我找到了解决方案。为了使它正确地重新加载,而不是调用setData和draw函数。我简单地将其替换为以下内容:
在指令中更改:
plot.setData(newVal);
plot.draw();
plot = $.plot($(element), newVal, scope.options);
这似乎有效地迫使流程图重新加载并正确呈现数据集。: D
相关文章:
- Angular JS IE9 Hashbang url rewriting
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 使用angular重定向到html页面
- angular.js没有'无法在PhoneGap中处理视图标记
- Javascript(Angular)从一个对象数组到第二个数组查找值
- angular 1.5应用程序中的导航栏
- angular的下拉菜单
- issue with FB.Event.subscribe
- Angular只从数组中获取所需的数据
- 如何将不可变的js导入angular 2(alpha)
- Issue With Angular $scope.Watch
- Issue with angular js 1.3.14
- Issue with Angular don't see my data
- ng-click Angular JS issue
- Angular JS Ng-Repeat Issue
- 在将jquery树插件转换为angular指令时,Issue $watch没有触发
- Angular/C# CORS Issue
- Flot js and Angular Issue