Il existe quelques exemples d'intégration de graphiques Google en tant que directive AngularJs.
Comme celui-ci: http://plnkr.co/edit/YzwjuU?p=preview
Mise à jour : Je veux éviter d'attendre sur Google Maps pour être prêt avant de démarrer l'application entière (comme indiqué dans l'exemple ci-dessus):
google.setOnLoadCallback(function() {
angular.bootstrap(document.body, ['myApp']);
});
Existe-t-il un moyen de le faire dans un seul module et non sur l'ensemble de l'application?
Mise à jour 2: J'ai créé mon plunker et cela fonctionne sans attendre le rappel mais je ne sais pas si cela fonctionnera dans tous les cas.
Comme vous l'avez déjà compris, vous pouvez initialiser angular dans la balise html ou body, sans attendre les graphiques Google.
Pour vous assurer que vous n'essayez pas de rendre un graphique avant que le code JavaScript du graphique Google ne soit prêt, je demanderais à la directive $ de regarder une nouvelle propriété/indicateur de portée de contrôleur $ que vous définissez dans la fonction de rappel pour google.setOnLoadCallback. Dans le rappel $ watch, vérifiez que l'indicateur est défini, puis effectuez votre initialisation.
Voici un bon exemple de directive AngularJs Google Chart Tools en action.
Ces mêmes instructions sont dans le plongeur lui-même.
Créez un div comme:
<div google-chart chart="chart" style="{{chart.cssStyle}}"> </div>
Ajoutez 'googlechart' à votre module comme ceci:
angular.module('myApp',[ 'googlechart', ...
$scope.chart
comme ça:{
"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
}
J'avais des problèmes périodiques en Angular avec l'API google chart n'étant pas chargée à temps pour recevoir les données d'une extraction $ http. Les données sont arrivées d'abord parfois (pas toujours), puis son utilisation dans le rappel échouerait avec "google.visualization.DataTable n'est pas une fonction"
À l'intérieur du rappel renvoyant des données:
var dataTable = new google.visualization.DataTable(data);
Pour le résoudre, j'ai trouvé dans ng-google-chart.js qu'il y avait une promesse appelée "googleChartApiPromise", alors je l'ai injectée et j'ai enveloppé l'appel de rafraîchissement:
googleChartApiPromise.then(function() {
refreshCharts();
});
Cela semble résoudre le problème.
Il y a un projet Github qui enveloppe Google Charts dans la directive AngularJS
https://github.com/angular-google-chart/angular-google-chart