Getting error "data.map is not a function" using angular-nvd3
当我尝试使用 angular-nvd3 配置一个简单的折线图时,我遇到了一些严重的 nvd3 错误。
我编辑了给出的示例 plunker,似乎我的数据格式错误,因为仅交换选项仍然有效。
这是一个出现故障的 plunkr:
http://plnkr.co/edit/fznNKBw6hwNYavfZ3Nvi?p=preview
选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $scope.options = { "chart": { "type":"lineChart", "height": 450, "useInteractiveGuideline": true, "dispatch": {}, "xAxis": { "axisLabel":"Months" }, "yAxis": { "axisLabel":"Team size", } } }; |
数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $scope.data = { "key":"Monthly", "values": [{ "x": 0, "y": 2 }, { "x": 1, "y": 6 }, { "x": 2, "y": 10 }] } |
谁能发现这个问题?
我用 nvd3 网站上的示例替换了您的 scope.data:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | $scope.data = sinAndCos(); /*Random Data Generator */ function sinAndCos() { var sin = [],sin2 = [], cos = []; //Data is represented as an array of {x,y} pairs. for (var i = 0; i < 100; i++) { sin.push({x: i, y: Math.sin(i/10)}); sin2.push({x: i, y: i % 10 == 5 ? null : Math.sin(i/10) *0.25 + 0.5}); cos.push({x: i, y: .5 * Math.cos(i/10+ 2) + Math.random() / 10}); } //Line chart data should be sent as an array of series objects. return [ { values: sin, //values - represents the array of {x,y} data points key: 'Sine Wave', //key - the name of the series. color: '#ff7f0e' //color - optional: choose your own line color. }, { values: cos, key: 'Cosine Wave', color: '#2ca02c' }, { values: sin2, key: 'Another sine wave', color: '#7777ff', area: true //area - set to true if you want this line to turn into a filled area chart. } ]; }; |
这在这个 plunkr 中有效:
plunkr
所以这意味着你正在尝试做的数据组件有问题。通过添加/减去数据元素进行实验,看看是否有帮助。
编辑:
您的数据对象格式错误:它应该采用以下格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $scope.data = [{ "key" :"Monthly", values : [{ "x" : 1, "y" : 6, "color" : 'blue' }, { "x" : 2, "y" : 10, "color" : 'red' } ] } ]; |
所以从文档中数据对象需要一个数组,然后值是值对象的另一个数组:
快速启动 1/3 向下页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | var app = angular.module('plunker', ['nvd3']); app.controller('MainCtrl', function($scope) { $scope.options = { chart: { type:"lineChart", height: 450, useInteractiveGuideline: true, dispatch: {}, xAxis: { axisLabel:"Months" }, yAxis: { axisLabel:"Team size", } } }; $scope.data = [{ key:"Monthly", values: [{ x: 0, y: 2 },{ x: 1, y: 6 }, { x: 2, y: 10 }], }] console.log($scope.options, $scope.data) }); |
这是您使用的数据的工作示例(在 plunker 中)