Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot read property 'transition' of null #5149

Closed
shehan360 opened this issue Jan 14, 2018 · 20 comments
Closed

Cannot read property 'transition' of null #5149

shehan360 opened this issue Jan 14, 2018 · 20 comments

Comments

@shehan360
Copy link

Im trying to draw a line chart using ChartJs and Agular4 that takes data from @input.

  ngOnChanges(){
		if(this.labelY  && this.dataSet){
			console.log(this.dataSet);
			console.log(this.labelY);
			setTimeout(()=>{
				this.draw();
			},500);
		}
		
	}

Without the timeout,
chartjserr
error is generated. Any idea on resolving this issue?

Im using ChartJs 2.7.1
And Angular 4

draw(){
		if (this.mychart) {
			this.mychart.destroy();
		}
		let ctx = this.mycanvas.nativeElement.getContext('2d');
    this.mychart=new Chart(ctx,
      {type: 'line',
			data: {
				labels:this.labels,
				datasets: this.dataSet
			},
			options: {
				responsive: true,
				elements: {
					line: {
							tension: 0 // disables bezier curves
					}
				},
				
				scales: {
					xAxes: [{
						type: "time",
						display: true,
						scaleLabel: {
							display: true,
							labelString: 'Time'
						},
                        ticks: {
                            major: {
                                fontStyle: "bold",
                                fontColor: "#FF0000"
                            }
                        }
					}],
					yAxes: [{
						display: true,					
						scaleLabel: {
							display: true,
							labelString: this.labelY
						},
						ticks: {
							min: 0, // it is for ignoring negative step.
							beginAtZero: true,
							stepSize: 1  // if i use this it always set it '1', which look very awkward if it have high value  e.g. '100'.
					}
					}]
				}
			}
          
        });    
  }
@etimberg
Copy link
Member

@shehan360 do you have a fiddle that reproduces this issue that we can use for debugging?

@shehan360
Copy link
Author

Guys the problem arose from Angular input binding problem. Not related to ChartJs.

@marcinn
Copy link

marcinn commented Feb 8, 2018

I think this is a chart.js problem. If you do quick dataset replacement (i.e. remove then add new) during animation / transition, the exception will be raised. Occurs also for animation duration: 0

@MinChanSike
Copy link

MinChanSike commented Apr 26, 2018

Anyone solved for Cannot read property 'transition' of null issue?
I also getting that issue when chart data source change quickly.

@shehan360
Copy link
Author

@MinChanSike are you getting the problem on Angular?

@MinChanSike
Copy link

MinChanSike commented Apr 26, 2018

no, I got in sample html page when I try to refresh data quickly.

@AwaisKazi
Copy link

I am also getting that error when I'm trying to push data into the charts.

@soumas
Copy link

soumas commented Jun 13, 2018

Try to call mychart.update() after setting the new data... that solved the problem for me.

@heartz66
Copy link

This error occurs when you just initialized the graph and overwrite the dataset almost immediately after you have initialized the graph (e.g., initializing the graph with empty dataset and sending an HTTP request to get a dataset from the server).

I was able to solve this error by completely disabling the animation in the options. My graph options:

var options = {
    responsive: true,
    maintainAspectRatio: false,
    animation: {
        duration: 0
    },
    hover: {
        animationDuration: 0
    },
    responsiveAnimationDuration: 0
};

@binDongKim
Copy link

chartInstance.update() solved the problem in my case.

@KimiaBashiran
Copy link

KimiaBashiran commented Jul 25, 2018

I'm using Angular and had the same problem.
I solved it by adding a ngDoCheck() to my chart and using chart.update() in the DoCheck
hope it helps!

@binDongKim
Copy link

@KimiaBashiran isn't ngDoCheck lifecycle called too many times?

@hdahle
Copy link

hdahle commented Jan 22, 2019

The "Uncaught TypeError" is still an issue,
WHat @heartz66 suggests does not work for me. The only workaround that consistently works for me is to include chart.update() - it does not seem to matter if animation is disabled.
Fiddle here: https://jsfiddle.net/hdahle/z18ovxnk/6/

@PaulWieland
Copy link

I just encountered this problem too. I've opened a new issue since this one was closed. See #6207

@henon
Copy link

henon commented Oct 15, 2020

as discussed in #6207, calling upate() on the chart after modifying the data solves this issue.

@DanteDX
Copy link

DanteDX commented Nov 1, 2020

Try to call mychart.update() after setting the new data... that solved the problem for me.

mine was solved by this

@masayomitan
Copy link

mt too.
update() is solved

@ctrl-d
Copy link

ctrl-d commented May 16, 2022

i had similar issue, after reading the source code adding datasetIndex to the Chart.LegendItem did the trick

@HackintoshwithUbuntu
Copy link

Try to call mychart.update() after setting the new data... that solved the problem for me.

Thank you so much, seems like my data had not arrived in time and updating the chart fixed the issue

@haseebahmad95
Copy link

i had similar issue, after reading the source code adding datasetIndex to the Chart.LegendItem did the trick

Thanks @ctrl-d this solves my issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests