【发布时间】:2012-10-17 16:58:50
【问题描述】:
我是 Angular 和 Flot 的新手,但对 Jquery 和 Javascript 很熟悉。我对如何将 Flot 图表绑定到 Angular 数据模型有点困惑,因为 Flot 是一个 JQuery 插件。我四处搜索,但找不到示例。
我也很乐意使用 highcharts、google-charts 或任何其他图表解决方案。
【问题讨论】:
标签: charts highcharts angularjs flot
我是 Angular 和 Flot 的新手,但对 Jquery 和 Javascript 很熟悉。我对如何将 Flot 图表绑定到 Angular 数据模型有点困惑,因为 Flot 是一个 JQuery 插件。我四处搜索,但找不到示例。
我也很乐意使用 highcharts、google-charts 或任何其他图表解决方案。
【问题讨论】:
标签: charts highcharts angularjs flot
由于图表涉及大量的 DOM 操作,因此指令是要走的路。
数据可以保存在控制器中
App.controller('Ctrl', function($scope) {
$scope.data = [[[0, 1], [1, 5], [2, 2]]];
});
您可以创建一个自定义 HTML 标签1 指定要从中获取数据的模型
<chart ng-model='data'></chart>
哪个angular可以通过指令编译
App.directive('chart', function() {
return {
restrict: 'E',
link: function(scope, elem, attrs) {
var data = scope[attrs.ngModel];
$.plot(elem, data, {});
elem.show();
}
};
});
对于大多数修改 DOM 的插件来说,这个过程是相似的。
-*-
此外,您可以观察图表底层数据的变化并重新绘制它,这样您就可以通过 $http 服务从控制器中获取数据并自动更新视图。这可以通过修改指令定义对象中的链接函数来实现
var chart = null,
opts = { };
scope.$watch(attrs.ngModel, function(v){
if(!chart){
chart = $.plot(elem, v , opts);
elem.show();
}else{
chart.setData(v);
chart.setupGrid();
chart.draw();
}
});
注意在指令中使用 Flot 的 API 来实现我们想要的。
1也可以是属性。
【讨论】:
要在angularJS中使用jQuery插件,你必须将它们包装在指令中,你可以通过阅读angularUI指令的源代码找到一些jQuery插件指令的例子:https://github.com/angular-ui/angular-ui/tree/master/modules/directives
【讨论】: