Angular JS >> Input file avec model

Par Polaris, il y a 10 ans


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, il y a 10 ans

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

betaWeb, il y a 10 ans

Salut,

Quelle version d'AngularJS utilises-tu ?

Polaris, il y a 10 ans

On est sur un version 1.3

betaWeb, il y a 10 ans

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, il y a 10 ans

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