AngularJs: Comment faire pour vérifier les changements dans le fichier de champs de saisie?
Je suis nouveau sur angulaire. Je suis en train de lire le fichier téléchargé chemin de HTML champ "fichier" chaque fois qu'un changement se produit dans ce domaine. Si j'utilise 'onChange' il fonctionne, mais lorsque je l'utilise angulaire de façon à l'aide de "ng-changement" ça 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'est jamais à l'appel. Firebug ne pas afficher d'erreur.
- Pourrait être utile: stackoverflow.com/q/17063000/983992
- Voir aussi ce stackoverflow.com/questions/16631702/file-pick-with-angular-js
Vous devez vous connecter pour publier un commentaire.
Pas de prise en charge de liaison pour le Fichier de Téléchargement de contrôle
https://github.com/angular/angular.js/issues/1375
au lieu de
pouvez-vous essayer
et dans vos changements de la fonction
au lieu de
pouvez-vous essayer
Ci-dessous est un exemple de travail de l'upload de fichier par glisser-déposer de dossier de téléchargement peut être utile
http://jsfiddle.net/danielzen/utp7j/
Angulaire De Téléchargement De Fichiers D'Informations
URL pour AngularJS Upload de Fichier en ASP.Net
http://cgeers.com/2013/05/03/angularjs-file-upload/
AngularJs native multi-upload de fichier avec le progrès avec NodeJS
http://jasonturim.wordpress.com/2013/09/12/angularjs-native-multi-file-upload-with-progress/
ngUpload - Un Service AngularJS pour le téléchargement de fichiers à l'aide d'une iframe
http://ngmodules.org/modules/ngUpload
sqren
's solution ... ... ... @0MV1J'ai fait une petite directive pour écouter le fichier d'entrée change.
Vue JSFiddle
view.html:
controller.js:
directive.js:
cancel
bouton de, déjà le nom de fichier sélectionné est arriver de passe 'Pas de fichier choisi", pouvez-vous suggérer une certaine manière de traiter ce cas.element.bind('change', onChangeHandler.bind(scope));
. Attention ici parce que cela va changer en fonction de la façon dont vous structuré votre application. J'ai pu accéder à la "cette" que j'avais besoin dans mon contrôleur qui était sur le prototype de l'objet "vm". Espérons que cela aide.$scope.$apply()
appel à la fin de la fonction. Il fonctionne avec les sélections multiples d'un même fichier avec les modifications de la tripoter lié par @sqren dans ses Sept 12 '15 commentaire.require: '^form',
à la définition de la directive, de transmettre le formulaire de contrôleur de la fonction de lien, puis d'appelerform.$setDirty()
dans le changement de la fonction du gestionnaire.restrict: 'A'
faire?E - element, C - class, M - comment
. Vous pouvez utiliser la combinaisonACE
qui signifie qu'il peut être n'importe où dans la combinaison.plnkr
lien vers lechat
: chat.stackoverflow.com/transcript/message/35411481#35411481id
sur l'entrée et cela devrait fonctionner.element.on('change', (...args) => scope.$apply(() => onChangeHandler(...args)));
je ne sais pas si c'est la plus ideomatic façon de faire celaC'est une amélioration de certaines des autres autour, les données se retrouveront dans un ng-model, qui est normalement ce que vous voulez.
De balisage (juste faire un attribut de fichier de données de sorte que la directive puisse trouver)
JS
$scope.$apply();
nécessaire? Monng-change
événement semble toujours à feu sans elle.Le propre de la méthode est d'écrire votre propre directive de se lier à l'événement "change".
Juste pour vous informer que IE9 ne prend pas en charge FormData de sorte que vous ne peut pas vraiment obtenir le fichier d'objet à partir de l'événement de changement.
Vous pouvez utiliser ng-téléchargement de fichier bibliothèque qui prend déjà en charge c'est à dire avec FileAPI polyfill et de simplifier l'affichage du fichier sur le serveur. Il utilise une directive pour atteindre cet objectif.
JS:
J'ai élargi sur @Stuart Axon l'idée d'ajouter deux voies de liaison pour le fichier d'entrée (c'est à dire autoriser la réinitialisation de l'entrée de réinitialisation du modèle de valeur à null):
Démo
data-ng-click="vm.theFile=''"
fonctionne bien , pas besoin de l'écrire à une méthode de contrôleurÀ l'instar de certaines autres bonnes réponses ici, j'ai écrit une directive pour résoudre ce problème, mais cette mise en œuvre plus proche de l'angle de fixation 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énement que vous donneriez à un $objet d'événement dans toute ng gestionnaire d'événement.
Javascript
fileChange
expression? Je suis l'aide de la présente directive à l'intérieur d'unng-repeat
et la$scope
variable passée àattrHandler
est le même pour chaque enregistrement. Quelle est la meilleure solution?La présente directive passer les fichiers sélectionnés ainsi:
Le HTML, comment l'utiliser:
Dans mon controller:
Je vous recommande de créer une directive
cette directive peut être utilisée de nombreuses fois, il utilise son propre champ d'application et ne dépend pas de parent. Vous pouvez également donner quelques paramètres à la fonction de gestionnaire. Gestionnaire de fonction sera appelée avec l'objet de l'étendue, qui était actif lors de la modification de l'entrée.
$s'appliquent les mises à jour de votre modèle chaque fois que l'événement change est appelé
Le plus simple Angulaire jqLite version.
JS:
HTML:
De travail Démo de "fichiers d'entrée" de la Directive qui Fonctionne avec
ng-change
UnDe faire un
<input type=file>
élément de travail de la ng-changement la directive, il a besoin d'un la coutume de la directive qui fonctionne avec le ng-model directive.La DÉMO
JS:
HTML:
Trop complet de la solution de base:
Un simple moyen de masquer le champ de saisie et de le remplacer par une image, ici, après une solution, qui nécessitent également un hack sur anguleux, mais qui font le travail [TriggerEvent ne fonctionne pas comme prévu]
La solution:
Sur l'image, utilisez nb-cliquez sur() pour activer une méthode de
Lorsque l'image est cliquée simuler un DOM l'action de cliquer sur le champ de saisie. Et voilà!
J'ai fait comme ceci;
Une autre façon intéressante à écouter fichier d'une entrée à l'est avec une montre au cours de la ng-modèle à l'attribut du fichier d'entrée. Bien sûr FileModel est une coutume de la directive.
Comme ceci:
HTML ->
<input type="file" file-model="change.fnEvidence">
Code JS ->
Espère que cela peut aider quelqu'un.
Angulaire des éléments (tels que l'élément racine d'une directive) sont jQuery [Lite] objets. Cela signifie que nous pouvons enregistrer l'écouteur d'événement de la sorte:
C'est jQuery cas de délégation. Ici, l'auditeur est attaché à l'élément racine de la directive. Lorsque l'événement est déclenché, il fera des bulles jusqu'à l'élément enregistré et jQuery permettra de déterminer si l'événement provient d'un intérieur de l'élément correspondant à l'défini sélecteur. Si c'est le cas, le gestionnaire d'incendie.
Avantages de cette méthode sont:
ng-if
oung-switch
)http://api.jquery.com/on/
Vous pouvez simplement ajouter le code ci-dessous dans onchange et il va détecter le changement. vous pouvez écrire une fonction sur X cliquez sur ou quelque chose pour supprimer du fichier de données..