Fichier choisir avec Angular JS
Je voudrais reprendre un fichier avec AngularJS:
HTML:
<div ng-controller="TopMenuCtrl">
<button class="btn" ng-click="isCollapsed = !isCollapsed">Toggle collapse</button>
<input type="file" ng-model="filepick" ng-change="pickimg()" multiple />
<output id="list"></output>
</div>
javascript:
angular.module('plunker', ['ui.bootstrap']);
function TopMenuCtrl($scope) {
$scope.pickimg = function() {
alert('a');
};
}
Comment puis-je lier le fichier d'entrée onchange
action sur le AngularJS pickimg
fonction?
Et comment puis-je manipuler les fichiers téléchargés après?
Vous devez vous connecter pour publier un commentaire.
Angulaire n'est pas encore en charge ng-changement pour input[type=file] de sorte que vous avez à rouler onchange de mise en œuvre vous-même.
Tout d'abord, dans le HTML, définir Javascript pour onchange comme suit:
Et puis dans votre Angulaire contrôleur de code, définir la fonction:
.file_changed(this)
par exemple.file_changed(this,obj)
où obj estngRepeat="obj in objects"
Quand j'ai essayé, dit-il obj n'est pas défini.$scope.$apply(function(scope) {
partie doit être à l'intérieur de lareader.onload
. Sinon le modèle ne met pas à jour.$element[0].children[0].onchange = () => {}
dans votre configuration du contrôleur. Cela supprime la nécessité d'avoir à s'exécuter en mode de débogage, puisque vous pouvez récupérer l'élément, tout en ayant toujours accès à votre contrôleur de portée.J'ai utilisé la méthode ci-dessus en essayant de charger une image d'aperçu lorsque de nouveaux fichiers sont sélectionnés, cependant cela n'a pas fonctionné quand j'ai essayé comme ça:
J'ai creusé plus en elle et a constaté que le $scope.$appliquer doit être à l'intérieur du lecteur.onLoad en modifiant un $portée des variables ne fonctionnent pas, donc je n'ai la suite et il a travaillé:
Teemu solution ne fonctionnera pas pour IE9.
J'ai mis en place un simple angulaire de la directive avec Flash polyfill pour les navigateurs ne supportant HTML5 FormData, vous pouvez également écouter de la progression du téléchargement de l'événement.
https://github.com/danialfarid/ng-file-upload
Démonstration: http://angular-file-upload.appspot.com/
contrôleur:
Qui suit est mon approche avec une directive.
Directive
HTML
Contrôleur
À l'aide de Madura réponse à partir de ci-dessus, voici l'écoulement complet de la lecture d'un local fichier JSON:
Créer directive:
HTML:
Javascript:
this.fileSelect()
. Quand je l'ai changer pour$scope.fileSelect()
, il n'est point d'arrêt, mais les rapports uniquement le nom du fichier, pas un chemin d'accès complet. Pouvez-vous aider? Il y a beaucoup de diaboliquement complexe AngulrJs sélecteur de fichier exemples, et c'est le seul qui semble assez simple à analyser. Si proche, et pourtant ...this
. Aussi loin que le chemin d'accès du fichier, je pense que le comportement que vous voyez est le comportement correct. Vous devriez toujours être en mesure de lire le fichier sur la base des résultats que vous obtenez.Voici un léger directive j'ai écrit pour résoudre ce problème, qui reflète 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
<input type="file" file-change="yourHandler($event, files)" ng-model="myFiles"/>
J'ai fait une directive. Voici la violon.
L'application fonctionne pour la cueillette de ces volumes et de leur montrer que des tables html.
Avec les changements dans les fichiers de la directive, vous serez en mesure de définir le fichier de la lecture et de l'analyse (avec les services, peut-être) dans la logique des contrôleurs de lui-même qui offrira plus de flexibilité. Juste pour la note, la
ac.onFileChange
fonction transmise sur les changements dans les fichiers de l'attribut deviendra le gestionnaire de changement d'entrée de l'événement à l'intérieur de la directive.JS:
CSS:
HTML:
Directive qui utilise le ng-model-contrôleur:
Utilisation:
Pour plus d'informations, voir Travail de Démonstration de la Directive qui Fonctionne avec ng-model.