2016-01-07 9 views
11

Jestem nowy w kanciastych i maszynopisach, więc jest to prawdopodobnie bardzo podstawowe.Trzecia strona JS w Angular2 maszynopis

Próbuję utworzyć komponent kątowy2 za pomocą wykresu (za pomocą wykresu Chart.js) w szablonie.

Rozumiem, że opracowywany jest chart directive, który w szczególności wykorzystuje Chart.JS, ale chciałbym zrozumieć, jak to zrobić, ponieważ niewątpliwie pojawi się w przypadku, gdy dyrektywa nie jest dostępna.

Do tej pory próbowałem to zrobić prostą rzecz w szablonie:

<canvas id="chart"></canvas> 
<script> 
$(function() { 
//instantiate chart on $("#chart") 
}); 
</script> 

Ale javascript nawet nie uruchomić, gdy szablon został załadowany przez angular2.

Co mam zrobić?

+0

Co próbujesz zrobić? A co to ma wspólnego z maszynopisem? Twoje pytanie i kod nie pokazują nic z maszynopisu .. – Pogrindis

+0

Po prostu, że koduję mój kąt2 w maszynie. Myślałem, że to jest istotne, ponieważ nie mogę napisać pliku javascript chart.js w moim pliku maszynopisu (jako rodzaj hack/obejścia) – Dynde

+0

jeśli piszesz maszynopis, to musisz skompilować do javascript przeglądarki, ponieważ przeglądarki rozumiem tylko javascript, a nie maszynopis. – Jai

Odpowiedz

11

Okay - z pomocą @Pogrindis, wydaje mi się, że znalazłem użyteczne, niezbyt złożone rozwiązanie.

Poprzez dodanie definicji pisania dla chart.js od here i przedstawieniu go w dyrektywie niestandardowego końcu mam to:

chart.directive.ts

/// <reference path="../../typings/chartjs/chart.d.ts" /> 

import {Directive, ElementRef, Renderer, Input} from 'angular2/core'; 
@Directive({ 
    selector: '[chart]' 
}) 
export class ChartDirective { 
    constructor(el: ElementRef, renderer: Renderer) { 
     //el.nativeElement.style.backgroundColor = 'yellow'; 
     var data = { 
      labels: ["January", "February", "March", "April", "May", "June", "July"], 
      datasets: [ 
       { 
        label: "My First dataset", 
        fillColor: "rgba(220,220,220,0.2)", 
        strokeColor: "rgba(220,220,220,1)", 
        pointColor: "rgba(220,220,220,1)", 
        pointStrokeColor: "#fff", 
        pointHighlightFill: "#fff", 
        pointHighlightStroke: "rgba(220,220,220,1)", 
        data: [65, 59, 80, 81, 56, 55, 40] 
       }, 
       { 
        label: "My Second dataset", 
        fillColor: "rgba(151,187,205,0.2)", 
        strokeColor: "rgba(151,187,205,1)", 
        pointColor: "rgba(151,187,205,1)", 
        pointStrokeColor: "#fff", 
        pointHighlightFill: "#fff", 
        pointHighlightStroke: "rgba(151,187,205,1)", 
        data: [28, 48, 40, 19, 86, 27, 90] 
       } 
      ] 
     }; 
     var ctx: any = el.nativeElement.getContext("2d"); 
     var lineChart = new Chart(ctx); 
     ////var lineChartOptions = areaChartOptions; 
     ////lineChartOptions.datasetFill = false; 
     lineChart.Line(data); 
    } 
} 

app.component.ts

import {Component} from 'angular2/core'; 
import {ChartDirective} from './chart.directive'; 

@Component({ 
    directives: [ChartDirective], 
    selector: 'chart-graph', 
    templateUrl: '/js/app/template.html' 
}) 

export class AppComponent { } 

i template.html:

<canvas id="myChart" chart width="400" height="400"></canvas> 
+0

Dzięki za twoje pytanie, to było dokładnie to, czego szukałem. Mam ogólny pomysł, dlaczego potrzebujesz DefinitelyTyped, ale jestem nieco zdezorientowany, jak go wdrożyć. 1. git clone DefinitelyTyped, 2. następnie odwołuje się do niego '' w index.html? może trochę bardziej rozwinąć twoją odpowiedź. Wszystko, co rozumiem, nawet dla Angular2! – Chad

+2

Okay to była sztuczka /// Nie wiedziałem, że to polecenie lub linia w Angular2, myślałem, że to był komentarz linia z jakiegoś powodu. Niezależnie od tego, upewnij się, że działa, ta odpowiedź sprawi, że będziesz działał na wykresach Chart.js i Angular2! Thanks @dynde – Chad

+0

@Dynde Którą wersją pliku charts.js użyłeś w swoich typach, o których wspomniałeś w swojej odpowiedzi? –

Powiązane problemy