这是一个简单的示例,其中所有内容都由指令处理:
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
给指令,使其更加通用和可重用。