gpt4 book ai didi

javascript - d3.select() 为 中的 html 元素返回 null

转载 作者:行者123 更新时间:2023-11-30 14:54:20 25 4
gpt4 key购买 nike

我有一个包含 < svg > 元素的 View < ng-template>

<div *ngIf="data == undefined; else elseBlock">
Sorry no data!
</div>
<ng-template #elseBlock>
<svg id="areachart" width="100%" height="210"></svg>
</ng-template>

使用 d3,我试图读取 svg 元素的宽度(baseValue),但 d3.select('#areachart') 在代码中返回 null:

export class DrawAreaChart implements AfterViewInit {

private data;

constructor(){}

ngAfterViewInit() {
this.chartService.getData().subscribe(
(result) => {
if (result) {
this.data = result;

var svg = d3.select("#areachart"),
width = +svg.property("width").baseVal.value, /* The code fails here */
height = +svg.property("height").baseVal.value;

....
....
}
}
);
}
....
....
....
}

它抛出错误说-

Cannot read property 'width' of null

请帮忙。

最佳答案

data 最初为 null,但在 this.data = result 之后 Angular 在 d3 尝试选择之前没有时间调整 DOM(因此有效的 svg 仍然不是在框架中)。

您可以在 ngOnChanges 上运行 d3 代码

ngOnChanges(changes: SimpleChanges) {
if(changes.data) {
// d3 code here
}
}

或者可能在 svg div 上使用 [hidden]="!data"(尽管对此有一些注意事项,请参阅 What is the equivalent of ngShow and ngHide in Angular2 )。

关于javascript - d3.select() 为 <ng-template> 中的 html 元素返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47561130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com