Renderuję wykres wewnątrz dyrektywy atrybutów kątowych2 (podejście przyjęte przez zespół kątowy2). To podejście działa z chart.js ale nie chart.js 2.xWykresy chart.js v2 nie wyświetlają się wewnątrz kątowej 2 (ale wykres.js v1 działa idealnie)
kod do dyrektywy atrybutu jest ...
import {Directive, ElementRef, Input} from '@angular/core';
declare var Chart:any;
@Directive({
selector: '[bargraph]'
})
export class BarGraphDirective {
el:any;
myChart:any;
constructor(element:ElementRef) {
this.el = element.nativeElement;
}
ngAfterViewInit() {
var canvas = this.el;
var ctx = canvas.getContext('2d');
var _data = {
labels: ["01-01",
"01-04",
"01-15",
"02-03",
"03-25",
"04-03",
"04-14",
"05-27",
"05-27",
"08-03"],
datasets: [{
data: [5, 13, 23, 20, 5, 13, 23, 20, 110, 2],
label: "female",
borderColor: "rgba(197,23,1,0.8)",
backgroundColor: "rgba(197,23,1,0.4)",
hoverBackgroundColor: "rgba(197,23,1,1)",
borderWidth: 1,
pointBorderColor: "rgba(197,23,1,1)",
pointBackgroundColor: "rgba(255,255,255,0.8)",
pointBorderWidth: 1.5,
tension: -1,
yAxisID: "y-axis-1",
}, ],
};
var _options = {
scales: {
xAxes: [{
categorySpacing: 0
}],
yAxes: [{
type: "linear",
display: true,
position: "left",
id: "y-axis-1",
}]
}
};
this.myChart = new Chart(ctx, {
type: "line",
data: _data,
options: _options
});
console.log(ctx);
console.log(this.myChart);
}
}
stylizacji jest ...
canvas[bargraph] {
height: 400px !important;
width: 700px !important;
}
komponent używając tego ...
<canvas bargraph width="700" height="400"></canvas>
w szablonie.
wszystko jest zgodne z oczekiwaniami. Instrukcje console.log ujawniają, że ctx i this.myChart są zdefiniowane wewnątrz haka cyklu życia ngAfterViewInit. Nie ma błędów. Wykres po prostu się nie wyświetla.
PS Chart.js kod v2 działa poprawnie poza Angular2 jak na ten JS Fiddle - http://jsfiddle.net/beehe4eg/
Jedyną różnicą pomiędzy JSFiddle i mój kod jest hak do DOM ...
document.getElementById("barChart") // for the fiddle
element.nativeElement // in my code as per the approach in the angular 2 docs
docs do dyrektywy, a zwłaszcza dla atrybutu DOM jest haczyk ... https://angular.io/docs/ts/latest/guide/attribute-directives.html#!#our-first-draft
hak element.nativeElement działa dobrze dla chart.js V1 z angular2 (używając identycznego podejścia).
UWAGA że github repo ... https://github.com/valor-software/ng2-charts korzysta chart.js v1 więc to nie pomoże
nadzieję, że ktoś tam może wiedzieć rozwiązanie lub można go naprawić! Z góry dziękuję.
Nie mogę odtworzyć Twojego problemu. Zobacz ten plunkr https://plnkr.co/edit/dYJuHrtEfVi5sPMpAQVP?p=preview chart^2.0.0-alpha – yurzui
@yurzui - wielkie dzięki za patrzenie na to - Wstępne dochodzenie ujawnia zmianę SRC na https: // cdnjs. cloudflare.com/ajax/libs/Chart.js/2.0-alpha/Chart.js go zrywa !!! nawet jeśli ma być ta sama wersja - jakieś myśli? – danday74