Comment intégrer une barre de progression dans angularjs directive avec upload de fichier

J'ai besoin de créer une barre de progression de téléchargement de fichiers. Je sais que mes progrès écouteur d'événement est de travail. Est il y a plus de "angulaire façon" de faire cela? Comment puis-je mettre à jour la barre de progression de l'intérieur de mon écouteur d'événement?

Comme une préface, n'hésitez pas à corriger et une critique de la logique générale de flux, s'il a besoin d'aide.

J'ai cette toile...

<canvas id="progress"></canvas>

J'ai un angularjs directive de téléchargement de fichiers. J'ai ajouté un progrès de l'écouteur d'événement (affiche uniquement les parties pertinentes)...

link: function postLink(scope, element, attrs, ctrl) {
    var fileUpload = function (img, file) {
        var xhr = new XMLHttpRequest();
        xhr.upload.addEventListener("progress", function(e) {
            if (e.lengthComputable) {
                var percentage = Math.round((e.loaded * 100) / e.total);
                //UPDATE THE PROGRESS BAR HERE
            }
        }, false);
    }
    element.bind('change', function (evt) {
         var files = evt.target.files;
         var canvas = document.getElementById("progress"),
         context = canvas.getContext("2d");
         context.fillStyle = 'lighgray';
         context.fillRect(0, 0, 200, 18);
         context.moveTo(0, 0);
         context.fillStyle = 'darkgray';
         context.fillRect(0, 0, 1, 18);
         for(var i = 0; i < files.length; i++) {
             fileUpload(files, files[i]);
        }
    }
}

OriginalL'auteur drew schmaltz | 2013-07-25