我使用Highcharts创建图表(并从JSON文件获取数据)。但是,我得到TypeError: Cannot read property 'map' of undefined
。
我有以下代码:
myData.get(function (data) {
$scope.loadData = data;
});
$('#container').highcharts({
xAxis: {
type: 'datetime'
},
series: [{
name: 'Temperature',
data: $scope.loadData.map(function(d) {
return [d.timestamp, d.actual];
})
}, {
name: 'Range',
data: $scope.loadData.map(function(d) {
return [d.timestamp, d.min, d.max];
}),
type: 'arearange'
}]
});
我还创建了Plunker。
关于我在这里做错了什么的提示?
答案 0 :(得分:2)
所以我将Plunkr改为一个有效的例子:http://plnkr.co/edit/Q4z6NdVtp3TRMKgmH5tc?p=preview
首先,在您的data.json中,您将时间戳添加为字符串。 Highchart不接受这一点。
我通过$ http
更改了工厂以获取JSON数据.factory('myData', function($http) {
return {
getData : function () {
var data = [];
data = $http.get('data.json');
return data;
}
}
})
在getData的回调中,我构建了图表:
myData.getData().then(function(response) {
$scope.loadData = response.data;
$('#container').highcharts({
xAxis: {
type: 'datetime'
},
series: [{
name: 'Temperature',
data: [$scope.loadData.timestamp, $scope.loadData.actual]
},
{
name: 'Range',
data: [$scope.loadData.timestamp, $scope.loadData.min, $scope.loadData.max],
type: 'arearange'
}]
});
});
答案 1 :(得分:0)
这是异步调用:
myData.get(function (data) {
console.log("myData.Get");
$scope.loadData = data;
});
因此$('#container').highcharts({...
将在数据设置$scope.loadData = data;
您必须在myData
myData.get(function (data) {
$scope.loadData = data;
$('#container').highcharts({
xAxis: {
type: 'datetime'
},
series: [{
name: 'Temperature',
data: $scope.loadData.map(function(d) {
return [d.timestamp, d.actual];
})
}, {
name: 'Range',
data: $scope.loadData.map(function(d) {
return [d.timestamp, d.min, d.max];
}),
type: 'arearange'
}]
});
});