我在我的angular项目中使用了D3 v4和Datamaps。我试着使变焦工作,但我不知道是什么问题。
我有一个创建地图的函数:
public createChart() {
this.geoChart = new Datamap({
element: this.geolocationChart.nativeElement,
scope: 'world',
width: null,
height: null,
projection: 'mercator',
responsive: true,
geographyConfig: {
hideAntarctica: true,
borderWidth: 1,
borderOpacity: 1,
borderColor: '#ffffff',
popupTemplate: function(geo, data) {
return ['<div class="hoverinfo"><strong>', geo.properties.name, ': ' + data.countryData, '</strong></div>'].join('');
},
popupOnHover: true,
highlightOnHover: true,
highlightFillColor: '#ff4200',
highlightBorderWidth: 2,
highlightBorderOpacity: 1
},
fills: {
defaultFill: '#f5f5f5',
highlight: '#5005a0'
},
data: this.convertData(this.defaultCountryData),
done: function(datamap) {
datamap.svg.call(d3.zoom().on('zoom', redraw));
function redraw() {
datamap.svg.selectAll('g').attr('transform', d3.event.transform);
}
}
});
}我在ngAfterContentInit中触发它。
当我尝试使用鼠标滚轮缩放或拖动地图时,在控制台中收到以下错误消息:"Cannot read property 'button‘of null“
我像这样导入D3和Datamaps:
import * as d3 from 'd3';
import Datamap from 'datamaps/dist/datamaps.world.min.js';我真的不知道问题出在哪里。我看过其他帖子,每个人都提到要像我一样导入D3。有什么想法吗?
发布于 2018-06-11 22:17:56
因此,经过更多的研究,我编写了以下代码:
function(datamap) {
d3.select('.datamap').call(
d3
.zoom()
.scaleExtent([0.7, 6])
.on('zoom', function() {
datamap.svg.selectAll('g').attr('transform', d3.event.transform);
})
);
}它在图表加载后运行,幸运的是它可以正常工作。由于某些原因,当您在datamap.svg上调用zoom()函数时,当datamap.svg和d3.select('.datamap')创建类似的数组但d3.select创建选择时,它会导致错误。如果有人知道为什么它不能以其他方式工作,请解释一下。
https://stackoverflow.com/questions/50763551
复制相似问题