2016-01-07 5 views
11

Я новичок в угловом и машинописном, поэтому это, вероятно, действительно базовый.Сторонний JS в Angular2 машинописных текстах

Я пытаюсь сделать компонент угловой2 с диаграммой (используя Chart.js) в шаблоне.

Я понимаю, что существует chart directive, который специально использует Chart.JS, но я хотел бы понять, как это сделать, поскольку он, несомненно, появится в экземпляре, где директива недоступна.

До сих пор я пытался сделать эту простую вещь в шаблоне:

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

Но Javascript даже не запускается, когда шаблон был загружен angular2.

Как бы я это сделал?

+0

Что вы пытаетесь сделать? И что это связано с машинописными текстами? Ваш вопрос и код ничего не показывают о машинописных текстах. – Pogrindis

+0

Просто, что я кодирую свой angular2 в машинописном тексте. Я думал, что это актуально, так как я не могу написать javascript chart.js в своем файле машинописных файлов (как своего рода хак/обходной путь) – Dynde

+0

, если вы пишете машинопись, тогда вам нужно скомпилировать JavaScript-браузер, поскольку браузеры только понять javascript не машинописный. – Jai

ответ

11

Хорошо - с помощью @Pogrindis Я думаю, что нашел удобное, не слишком сложное решение.

Просто добавив определение набора текста для chart.js из here и ссылаться на него в пользовательской директивы я, наконец, это:

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 { } 

и template.html:

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

Спасибо за вопрос, это именно то, что я искал. У меня есть общее представление о том, почему вам нужно Определенно, но я немного смущен, как его реализовать. 1. git clone DefinitelyTyped, 2. затем назовите его '' в index.html? может немного объяснить ваш ответ. Все остальное, что я понимаю, даже для Angular2! – Chad

+2

Хорошо, это был трюк /// Я не знал, что это была команда или строка в Angular2, я думал, что это был комментарий по какой-то причине. Независимо от того, убедитесь, что это работает, этот ответ заставит вас работать на Chart.js и Angular2! Спасибо @dynde – Chad

+0

@ Dynde Какую версию charts.js вы использовали с типизациями, указанными в вашем ответе? –

Смежные вопросы