GoogleチャートをAngularJsディレクティブとして統合する例がいくつかあります。
このように: http://plnkr.co/edit/YzwjuU?p=preview
Update:アプリケーション全体をブートストラップする前に、Googleチャートの準備ができるのを待たないようにします(上記の例に示すように):
google.setOnLoadCallback(function() {
angular.bootstrap(document.body, ['myApp']);
});
アプリ全体ではなく単一のモジュールでこれを行う方法はありますか?
更新2:プランカーを作成しましたが、コールバックを待たなくても機能しますが、すべてのケースで機能するかどうかはわかりません。
すでに理解しているように、Googleチャートを待たずに、htmlまたはbodyタグでangularを初期化できます。
GoogleチャートのJavaScriptコードの準備ができる前にチャートをレンダリングしないようにするには、google.setOnLoadCallbackのコールバック関数内に設定するディレクティブ$ watch a new controller $ scope property/flagを使用します。 $ watchコールバック内で、フラグが設定されていることを確認してから、初期化を行います。
AngularJs Google Chart Toolsディレクティブの動作の良い例を次に示します。
これらの同じ手順は、プランカー自体にあります。
次のようなdivを作成します。
<div google-chart chart="chart" style="{{chart.cssStyle}}"> </div>
次のように「googlechart」をモジュールに追加します。
angular.module('myApp',[ 'googlechart', ...
$scope.chart
このような:{
"type": "ColumnChart",
"cssStyle": "height:200px; width:300px;",
"data": {
"cols": [
{
"id": "month",
"label": "Month",
"type": "string",
"p": {}
},
{
"id": "laptop-id",
"label": "Laptop",
"type": "number",
"p": {}
},
{
"id": "desktop-id",
"label": "Desktop",
"type": "number",
"p": {}
},
{
"id": "server-id",
"label": "Server",
"type": "number",
"p": {}
},
{
"id": "cost-id",
"label": "Shipping",
"type": "number"
}
],
"rows": [
{
"c": [
{
"v": "January"
},
{
"v": 19,
"f": "42 items"
},
{
"v": 12,
"f": "Ony 12 items"
},
{
"v": 7,
"f": "7 servers"
},
{
"v": 4
}
]
},
{
"c": [
{
"v": "February"
},
{
"v": 13
},
{
"v": 1,
"f": "1 unit (Out of stock this month)"
},
{
"v": 12
},
{
"v": 2
}
]
},
{
"c": [
{
"v": "March"
},
{
"v": 24
},
{
"v": 0
},
{
"v": 11
},
{
"v": 6
}
]
}
]
},
"options": {
"title": "Sales per month",
"isStacked": "true",
"fill": 20,
"displayExactValues": true,
"vAxis": {
"title": "Sales unit",
"gridlines": {
"count": 6
}
},
"hAxis": {
"title": "Date"
}
},
"formatters": {},
"displayed": true
}
私はAngularで定期的に問題を抱えていましたが、$ httpフェッチからデータを受け取るためにGoogleチャートAPIが時間どおりにロードされていません。データが来ましたfirstときどき(not常に)、コールバックでの使用は「google.visualization.DataTable is not a function」で失敗します
データを返すコールバック内:
var dataTable = new google.visualization.DataTable(data);
これを解決するために、ng-google-chart.jsで「googleChartApiPromise」というプロミスがあることがわかりましたので、これを挿入して、更新呼び出しをラップしました。
googleChartApiPromise.then(function() {
refreshCharts();
});
これで問題は解決したようです。
GoogleチャートをAngularJSディレクティブにラップするGithubプロジェクトがあります
https://github.com/angular-google-chart/angular-google-chart