d3.js 无法读取未定义的属性(阅读'append')不确定原因?[duplicate]

xuo3flqw  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(165)

此问题已存在

The barchart is not being displayed in the local server site?
三个月前关门了。
我在d3.js中使用了Angular TypeScript。我创建了一个条形图,但它没有显示出来,不知道为什么。我创建了私有类并将它们实现到ngOnInit()类中,但当我在服务器上运行它时,没有任何内容,并且是空白的。在终端上,它没有显示任何问题,但我不确定为什么它没有显示。我不确定是否必须将其调用到bar-char. component中。html。我创建了一个小数据集,只是为了看看条形图是否可以可视化。这是Angular/TypeScript和d3.js的新手。下面是我的代码:

export class BarChartComponent implements OnInit 
 {
  private svg:any;
  private dataSet = [10,20,30,32,47,50,76];

  private margin = 50; 
  private height = 100 - (this.margin * 2); 
  private width = 200 - (this.margin * 2); 

  public createSvg(): void{
   var svg = d3.select('barchart')
  .append('svg')
  .attr("width", this.height + (this.margin * 2) 
 )
  .attr("height", this.height + (this.margin * 
   2))
  .append('g')
  .attr('transform', 'translate(' + this.margin 
   + "," + this.margin + ')');

  d3.select('barchart');
  }

 //x axis band scale

 private drawBars(dataSet: any[]): void{

   const xAxis = d3.scaleBand()
  .range([0, this.width])
  .domain(dataSet.map(d => d.Framework))
  .padding(0.2);

// drawing the x-axis 
  this.svg.append('g')
   .attr("transform", "translate(0," + 
    this.height + ")")
   .call(d3.axisBottom(xAxis))
   .selectAll("text")
   .attr("tranform" 
   ,"translate(-10,0)rotate(-45)")
   .style("text-anchor", "end");

   const yAxis= d3.scaleLinear()
   .domain([0, 100])
   .range([this.height, 0]);

   this.svg.append("g")
   .call(d3.axisLeft(yAxis));

   //creation of bar graph and fill in the bars

   this.svg.selectAll("bars")
   .data(dataSet)
   .enter()
   .append("rect")
   //.attr("x", d => xAxis(d.Framework))
   //.attr("y", d => yAxis(d.Stars))
   .attr("width", xAxis.bandwidth())
   //.attr("height", (d) => this.height - 
    yAxis(d.Stars))
   .attr("fill", "#d04a35");
}

 constructor() { }

 ngOnInit(): void {
 this.createSvg();
 this.drawBars(this.dataSet);

}

在我运行服务器后,我在控制台上得到一个错误,关于它没有阅读append属性。下面是错误消息的图片:ERROR TypeError: cannot read properties of undefined(reading 'append')
有什么好的提示,让未来不会重复同样的错误?我对使用这些技术非常陌生。

waxmsbnn

waxmsbnn1#

我会从调试开始,找出将错误附加到哪个对象上,但有时我会通过添加optional chaining.来处理此类问题
看起来您实际上可能需要在createSvg()中引用全局svg

public createSvg(): void{
   this.svg = d3.select('barchart')
  ?.append('svg')
  .attr("width", this.height + (this.margin * 2) 
 )
  .attr("height", this.height + (this.margin * 
   2))
  ?.append('g')
  .attr('transform', 'translate(' + this.margin 
   + "," + this.margin + ')');

  d3.select('barchart');
  }

相关问题