我正在做一个Angular应用程序,我最近发现了Metrics Graphics。问题是我很难尝试将其集成到我的角度应用程序中,因为它是为 Jquery 构建的。
另一个棘手的问题是,我的 Angular 应用程序正在使用一个 restful API,而对于我想要集成的图形,数据在 API 中。
生成图形的代码:
$(function () {
d3.json('file/json.json', function(data) {
data_graphic({
data: data,
width: 650,
height: 150,
target: '#element',
x_accessor: 'Month',
y_accessor: 'Value'
})
});
});
如您所见,此代码从 json 文件中提取数据。值得庆幸的是,我的 API 也返回了 json 格式,即 http://api.example.com/api/data。
所以我想做的是将这个jquery脚本绑定到一个角度指令(或控制器)中,并使数据来自API而不是文件。
谢谢
下面是一个简单的示例,其中所有内容都由指令处理:
app.directive('metrics', function($http) {
return {
restrict: 'E',
link: function(scope, element) {
var success = function(result) {
data_graphic({
title: "UFO Sightings",
description: "Yearly UFO sightings from 1945 to 2010.",
data: result,
markers: [{
'year': 1964,
'label': '"The Creeping Terror" released'
}],
width: 400,
height: 250,
target: element[0],
x_accessor: "year",
y_accessor: "sightings",
interpolate: "monotone"
});
};
var error = function() {
console.log('Error.');
};
$http.get('data.json').success(success).error(error);
}
};
});
用法:
<metrics></metrics>
您可以将data.json
替换为所需的 URL,只要它返回正确的格式即可。成功函数将启动data_graphic
并将data
设置为从$http.get
和目标到指令 DOM 元素的结果。
演示:http://plnkr.co/edit/SOfTS6KL0GJ7ynvyrBfn?p=preview
如果希望控制器处理数据的检索:
app.controller('MyController', function($scope, $http) {
var success = function(result) {
$scope.data = result;
};
var error = function() {
console.log('Error.');
};
$http.get('data.json').success(success).error(error);
});
命令:
app.directive('metrics', function($http) {
return {
restrict: 'E',
scope: {
data: '='
},
link: function(scope, element) {
data_graphic({
title: "UFO Sightings",
description: "Yearly UFO sightings from 1945 to 2010.",
data: scope.data,
markers: [{
'year': 1964,
'label': '"The Creeping Terror" released'
}],
width: 400,
height: 250,
target: element[0],
x_accessor: "year",
y_accessor: "sightings",
interpolate: "monotone"
});
}
};
});
用法:
<body ng-controller="MyController">
<metrics ng-if="data" data="data"></metrics>
</body>
请注意,ng-if
用于防止指令在数据可用之前执行。
演示:http://plnkr.co/edit/96IVbjlZk8nriiREHdl4?p=preview
下一步是将data_graphic
中使用的整个对象传递给指令,使其更加通用和可重用。