Je suis nouveau à angulaire. J'essaie de lire le chemin du fichier téléchargé à partir du champ "fichier" HTML chaque fois qu'un "changement" se produit sur ce champ. Si j'utilise 'onChange' cela fonctionne mais quand je l'utilise de manière angulaire en utilisant 'ng-change' cela ne fonctionne pas.
<script>
var DemoModule = angular.module("Demo",[]);
DemoModule .controller("form-cntlr",function($scope){
$scope.selectFile = function()
{
$("#file").click();
}
$scope.fileNameChaged = function()
{
alert("select file");
}
});
</script>
<div ng-controller="form-cntlr">
<form>
<button ng-click="selectFile()">Upload Your File</button>
<input type="file" style="display:none"
id="file" name='file' ng-Change="fileNameChaged()"/>
</form>
</div>
fileNameChaged () n'appelle jamais. Firebug ne montre également aucune erreur.
Réponses:
Aucune prise en charge de liaison pour le contrôle de téléchargement de fichiers
https://github.com/angular/angular.js/issues/1375
au lieu de
peux-tu essayer
et dans votre fonction change au lieu de
peux-tu essayer
Vous trouverez ci-dessous un exemple de téléchargement de fichiers avec téléchargement de fichiers par glisser-déposer. Http://jsfiddle.net/danielzen/utp7j/
Informations sur le téléchargement de fichiers angulaires
URL pour le téléchargement de fichiers AngularJS dans ASP.Net
http://cgeers.com/2013/05/03/angularjs-file-upload/
Téléchargement multi-fichiers natif AngularJs avec progression avec NodeJS
http://jasonturim.wordpress.com/2013/09/12/angularjs-native-multi-file-upload-with-progress/
ngUpload - Un service AngularJS pour télécharger des fichiers en utilisant iframe
http://ngmodules.org/modules/ngUpload
la source
sqren
la solution ... ... ... @ 0MV1J'ai fait une petite directive pour écouter les changements d'entrée de fichier.
Voir JSFiddle
view.html:
controller.js:
directive.js:
la source
Ceci est un raffinement de certains des autres, les données se retrouveront dans un modèle ng, qui est normalement ce que vous voulez.
Balisage (créez simplement un fichier de données d'attribut pour que la directive puisse le trouver)
JS
la source
$scope.$apply();
requis? Monng-change
événement semble toujours se déclencher sans lui.La meilleure façon est d'écrire votre propre directive à lier à l'événement "change". Juste pour vous faire savoir qu'IE9 ne prend pas en charge FormData, vous ne pouvez donc pas vraiment obtenir l'objet fichier à partir de l'événement change.
Vous pouvez utiliser la bibliothèque ng-file-upload qui prend déjà en charge IE avec FileAPI polyfill et simplifier la publication du fichier sur le serveur. Il utilise une directive pour y parvenir.
JS:
la source
J'ai développé l'idée de @Stuart Axon d'ajouter une liaison bidirectionnelle pour l'entrée de fichier (c'est-à-dire permettre de réinitialiser l'entrée en réinitialisant la valeur du modèle à null):
Démo
la source
data-ng-click="vm.theFile=''"
fonctionne vraiment bien, pas besoin de l'écrire dans une méthode de contrôleurSemblable à certaines des autres bonnes réponses ici, j'ai écrit une directive pour résoudre ce problème, mais cette implémentation reflète de plus près la façon angulaire d'attacher des événements.
Vous pouvez utiliser la directive comme ceci:
HTML
Comme vous pouvez le voir, vous pouvez injecter les fichiers sélectionnés dans votre gestionnaire d'événements, comme vous injecteriez un objet $ event dans n'importe quel gestionnaire d'événements ng.
Javascript
la source
fileChange
expression? J'utilise cette directive à l'intérieur d'unng-repeat
et la$scope
variable transmise àattrHandler
est la même pour chaque enregistrement. Quelle est la meilleure solution?Cette directive transmet également les fichiers sélectionnés:
Le HTML, comment l'utiliser:
Dans mon contrôleur:
la source
Je recommande de créer une directive
cette directive peut être utilisée plusieurs fois, elle utilise sa propre portée et ne dépend pas de la portée parent. Vous pouvez également donner quelques paramètres à la fonction de gestionnaire. La fonction de gestionnaire sera appelée avec l'objet scope, qui était actif lorsque vous avez modifié l'entrée. $ apply met à jour votre modèle à chaque appel de l'événement change
la source
La version jqLite angulaire la plus simple.
JS:
HTML:
la source
Démonstration de travail de la directive «entrée de fichiers» qui fonctionne avec
ng-change
1Pour faire fonctionner un
<input type=file>
élément avec la directive ng-change , il a besoin d'une directive personnalisée qui fonctionne avec la directive ng-model .La DEMO
la source
Base de solution trop complète sur:
Un moyen simple de masquer le champ de saisie et de le remplacer par une image, ici après une solution, qui nécessite également un hack sur angulaire mais qui fait le travail [TriggerEvent ne fonctionne pas comme prévu]
La solution:
Lorsque vous cliquez sur l'image, simulez une action DOM «cliquez» sur le champ de saisie. Et voilà!
la source
Je l'ai fait comme ça;
la source
Une autre façon intéressante d'écouter les modifications d'entrée de fichier est de surveiller l'attribut ng-model du fichier d'entrée. Bien sûr, FileModel est une directive personnalisée.
Comme ça:
HTML ->
<input type="file" file-model="change.fnEvidence">
Code JS ->
J'espère que cela peut aider quelqu'un.
la source
Les éléments angulaires (tels que l'élément racine d'une directive) sont des objets jQuery [Lite]. Cela signifie que nous pouvons enregistrer l'auditeur d'événements comme ceci:
Il s'agit de la délégation d'événement jQuery. Ici, l'écouteur est attaché à l'élément racine de la directive. Lorsque l'événement est déclenché, il bouillonne jusqu'à l'élément enregistré et jQuery détermine si l'événement est originaire d'un élément interne correspondant au sélecteur défini. Si c'est le cas, le gestionnaire se déclenche.
Les avantages de cette méthode sont:
ng-if
oung-switch
)http://api.jquery.com/on/
la source
Vous pouvez simplement ajouter le code ci-dessous dans onchange et il détectera le changement. vous pouvez écrire une fonction sur un clic X ou quelque chose pour supprimer les données du fichier ..
la source