Bonjour,

Voila je rencontre un petit problème avec mon code. j'aimerais attacher un comportement de type ng-model a un input de type file

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire
Tous fonctionne parfaitement sur Firefiox / Opera/ Chrome mais pas IE9 bien sur .

.directive('fileModel', [ '$parse', function($parse) {
           return {
             restrict : 'A',
             link : function(scope, element, attrs) {
               var model = $parse(attrs.fileModel);
               var modelSetter = model.assign;

              element.bind('change', function() {
                  scope.$apply(function() {
                    modelSetter(scope, element[0].files[0]);
                  });
               });
             }
           };
          }
   ])

Ce que j'obtiens

Sur IE j'ai toujours l'erreur $apply is already in progress . Même un essayant de faire un "safe" apply aucun changement si vous avez une piste je suis intéréssé merci. Je ne sais pas du tous d'ou vient le soucis puisque sa marche sur tous les autres navigateurs. il doit bien être possible de le faire sur IE9

5 réponses


Polaris
Auteur
Réponse acceptée

Bon au final j'ai pas trouver de solutions donc uniquement pour IE j'ai transformer sa avec un upload standard javascript.

Salut,

Quelle version d'AngularJS utilises-tu ?

Polaris
Auteur

On est sur un version 1.3

Essaye de mettre un $timeout de 200ms avant ton $apply :

.directive('fileModel', [ '$parse', '$timeout', function($parse, $timeout) {
           return {
             restrict : 'A',
             link : function(scope, element, attrs) {
               var model = $parse(attrs.fileModel);
               var modelSetter = model.assign;

              element.bind('change', function() {
                $timeout(function () {
                    scope.$apply(function() {
                        modelSetter(scope, element[0].files[0]);
                    });
                 }, 200, false);
               });
             }
           };
          }
   ])
Polaris
Auteur

J'ai pas penser a le dire mais j'ai déjà essayer et pas de changements :(