37 votes

Comment intégrer Flot à AngularJS ?

Je suis nouveau dans Angular et Flot, mais j'ai de l'expérience avec Jquery et Javascript. Je ne sais pas trop comment lier un graphique Flot à des modèles de données Angular, puisque Flot est un plugin JQuery. J'ai fait des recherches, mais je n'ai pas pu trouver d'exemple.

Je serais également heureux d'utiliser highcharts, google-charts, ou toute autre solution graphique.

67voto

jaime Points 15538

Étant donné que la création de graphiques implique une manipulation lourde du DOM, les directives sont la solution.

Les données peuvent être conservées dans le contrôleur

App.controller('Ctrl', function($scope) {
    $scope.data = [[[0, 1], [1, 5], [2, 2]]];
});

Et vous pouvez créer une balise HTML personnalisée 1 en spécifiant le modèle dont vous voulez obtenir les données

 <chart ng-model='data'></chart>

qu'angular peut compiler grâce à une directive

App.directive('chart', function() {
    return {
        restrict: 'E',
        link: function(scope, elem, attrs) {
            var data = scope[attrs.ngModel];
            $.plot(elem, data, {});
            elem.show();
        }
    };
});

Exemple ici .

Ce processus est similaire pour la plupart des plugins qui modifient le DOM.

-*-

De plus, vous pouvez surveiller les changements dans les données sous-jacentes du graphique et les redessiner. De cette façon, vous pouvez récupérer les données via le service $http depuis votre contrôleur et mettre à jour la vue automatiquement. Ceci peut être réalisé en modifiant la fonction de liaison dans l'objet de définition de la directive

   var chart = null,
       opts  = { };

    scope.$watch(attrs.ngModel, function(v){
        if(!chart){
            chart = $.plot(elem, v , opts);
            elem.show();
        }else{
            chart.setData(v);
            chart.setupGrid();
            chart.draw();
        }
    });

Remarquez l'utilisation de l'API de Flot dans la directive pour obtenir ce que nous voulons.

Voici l'exemple complet


1 Peut aussi être un attribut.

1voto

Guillaume86 Points 7812

Pour utiliser les plugins jQuery avec angularJS, vous devez les envelopper dans des directives, vous pouvez trouver quelques exemples de directives de plugins jQuery en lisant le code source des directives angularUI : https://github.com/angular-ui/angular-ui/tree/master/modules/directives

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X