D3指令-获取路径无效值的错误
D3 Directive- gettng error for invalid value for path
我是使用D3的新手,我试图写出一个指令来创建一个面积图。我以为我已经正确地写出了指令,但我得到了一个关于路径无效值的错误。我认为这与没有正确解析日期有关。我花了很多时间试图修复它,但没有结果。我希望有人看看它,因为我可能错过了一些东西。数据来自控制器中的JSON数组。
$scope.dataArray = [
{"date":"2014-10-05T15:48:52-07:00","value":16},
{"date":"2014-07-15T22:26:11-07:00","value":24},
{"date":"2014-09-23T18:52:10-07:00","value":54},
and so on . . .
];
希望有一双新的眼睛能发现我做错了什么。
(function(){
'use strict';
angular.module('d3AngularApp')
.directive('testAreaChart', ['d3Service', function (d3Service){
var link = function($scope, $el, $attrs){
d3Service.d3().then(function (d3){
var margin = {top: 20, right: 20, bottom: 30, left: 50},
width = $el[0].clientWidth - margin.left - margin.right,
height = $el[0].clientHeight - margin.top - margin.bottom;
var parseDate = d3.time.format("%d-%b-%y").parse;
var x = d3.time.scale()
.range([0, width]);
var y = d3.scale.linear()
.range([height, 0]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
var svg = d3.select($el[0])
.append("svg");
var updateGraph = function (){
var data = $scope.chartdata;
data.forEach(function(d) {
d.date = parseDate(d.date);
d.value = +d.value;
});
var area = d3.svg.area()
.x(function(d) { return x(d.date); })
.y0(height)
.y1(function(d) { return y(d.value); });
svg.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
x.domain(d3.extent(data, function(d) { return d.date; }));
y.domain([0, d3.max(data, function(d) { return d.value; })]);
svg.append("path")
.datum(data)
.attr("class", "area")
.attr("d", area);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("Price ($)");
resize();
};
function resize(){
var newWidth = $el[0].clientWidth,
newHeight = (Math.round($el[0].clientWidth * .75));
svg.attr('width', newWidth);
svg.attr('height', newHeight )
}
$scope.$on('windowResize', resize);
$scope.$watch('chartdata', updateGraph);
})
}
return {
restrict: 'E',
template: '<div class="areachart col-md-12"></div>',
replace: true,
scope : {chartdata: '='},
link: link
}
}]);
})();
我知道我需要什么了。D3将我的日期作为字符串读取,我需要添加一个函数将所有日期字符串更改为日期值。
var data = $scope.chartdata;
function formatDate(input) {
return new Date(input);
}
for (i=0; i < data.length; i++){
data[i].date = formatDate(data[i].date);
}
watch通常在实例化时触发(在作用域上有数据之前),所以当chartData未定义时,您可能正在运行updateGraph。尝试将$scope.$watch('chartdata', updateGraph);
更改为$scope.$watch('chartdata', function(d) { if(d) { updateGraph() }; });
相关文章:
- Jquery Datatables错误:无效的JSON基元:draw
- JavaScript错误无效的限定符
- 在正则表达式中添加 (?i) 会导致 javascript 中出现错误“无效的正则表达式组”
- 对话框函数错误无效函数
- JavaScript运行时错误:无效字符
- 类型错误: 无效的“in”操作数 obj
- 如何更新列表项由jQuery AJAX调用添加的ASP Dropdown:错误无效的回发或回调
- Javascript Regex:匹配']'和'-',错误:无效的限定符
- MeteorJS 错误“无效的修饰符.修饰符必须是对象”
- 猫鼬的回调()参数错误无效
- 传单错误:无效的 LatLng 对象:( ,未定义)
- Nodejs 正则表达式错误:“无效的正则表达式:没有什么可重复的”
- JavaScript运行时错误:无效字符(JSON.parse)
- 谷歌地图api v3-IE7-main.js错误-无效参数(javascript)
- 错误:无效XML:jquery或将多个根转换为多个变量
- 节点 - npm 请求中的 uri 错误无效
- 节点.js类型错误:无效的非字符串/缓冲区块
- 内部错误:无效UTF-8 - Sass &饮而尽
- 高库存错误无效日期
- edgee:弹弓错误[无效指令]