ng-model für die `<input type="file"/>`, (mit der Richtlinie DEMO)
Ich versuche mit ng-model auf dem input-tag mit type Datei:
<input type="file" ng-model="vm.uploadme" />
Aber nach Auswahl einer Datei im controller, $Umfang.vm.uploadme ist noch nicht definiert.
Wie bekomme ich die ausgewählte Datei in meinen controller?
- Siehe stackoverflow.com/a/17923521/135114, besonders der zitierte Beispiel online unter jsfiddle.net/danielzen/utp7j
- Ich glaube, Sie müssen immer geben Sie die name-Eigenschaft eines html-Elements bei Verwendung ngModel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellte ich einen workaround mit der Richtlinie:
Und der input-tag wird:
Oder wenn Sie einfach die Datei, die definition wird benötigt:
<input type="file" fileread="$parent.uploadme" />
. Ich fand das mit Ionischen, weil viele es Richtlinien erstellen einen untergeordneten Bereich. Ich musste$parent.$parent.$parent.newImage
bekommen Sie bis zu meinem root-controller.require: '^form',
der Richtlinie definition, übergeben Sie das Formular-controller, um die link-Funktion, dann rufen Sieform.$setDirty()
im$apply
Funktion.$scope.$on('$destroy', function(){ element.unbind("change"); });
korrigierte code von @Nawlbergsreader.readAsDataURL
Methode ist veraltet. Moderne code verwendet URL.createObjectURL().Ich mit dieser Direktive:
ab und rufen Sie es wie folgt:
Eigentum (editItem.editItem._attachments_uri.Bild) wird gefüllt mit dem Inhalt der Datei, die Sie wählen als Daten-uri (!).
Bitte beachten Sie, dass dieses Skript nicht alles hochladen, was. Es wird nur füllen Sie Ihr Modell mit dem Inhalt der Datei codiert ad eine data-uri (base64).
Schauen Sie sich eine funktionierende demo hier:
http://plnkr.co/CMiHKv2BEidM9SShm9Vv
image in dummy.images
zuimage in dummy.images track by $index
hat Prima funktioniert jetzt. DankngModel
's$render
Funktion?restrict: 'A'
?reader.readAsDataURL
Methode ist veraltet. Moderne code verwendet URL.createObjectURL().Arbeiten Demo der Richtlinie, das Funktioniert mit
ng-model
Aktivieren
<input type="file">
arbeiten mitng-model
Den Kern
ng-model
Richtlinie funktioniert nicht mit<input type="file"
aus der box.Diese benutzerdefinierte Richtlinie ermöglicht
ng-model
und hat den zusätzlichen Vorteil, dass derng-change
,ng-required
, undng-form
Richtlinien für die Arbeit mit<input type="file">
.JS:
HTML:
Dies ist ein Nachtrag zu @endy-tjahjono Lösung.
Landete ich nicht in der Lage, um den Wert der uploadme aus dem Rahmen. Obwohl uploadme in der HTML war sichtlich aktualisiert durch die Richtlinie, konnte ich immer noch nicht auf seinen Wert von $scope.uploadme. Ich war in der Lage, seinen Wert aus dem Bereich, aber. Geheimnisvoll, richtig..?
Als es stellte sich heraus, ein Kind Anwendungsbereich wurde durch die Richtlinie, und die untergeordneten Bereich hatte seine eigene uploadme.
Die Lösung war die Verwendung eines Objekts, nicht als primitiv zu halten, den Wert der uploadme.
In der Steuerung habe ich:
und im HTML:
Gibt es keine änderungen der Richtlinie.
Nun, es funktioniert alles wie erwartet. Ich kann schnappen Sie sich den Wert von uploadme.src von meinem controller mit $scope.uploadme.
$scope.uploadme = { src: '' }
Hallo Leute, ich erstellen Sie eine Richtlinie und registriert Laube.
diese lib wird Ihnen helfen, die Modellierung der input-Datei, nicht nur zurück, Datei-Daten, sondern auch Datei dataurl-oder base 64.
https://github.com/mistralworks/ng-file-model/
Hoffe, dass wird Ihnen helfen,
reader.readAsDataURL
Methode ist veraltet. Moderne code verwendet URL.createObjectURL().Dies ist eine leicht modifizierte version, die Sie können, geben Sie den Namen des Attributs in dem Umfang, wie Sie es tun, mit ng-Modell, Verwendung:
Richtlinie:
Für mehrere input-Dateien mit lodash oder Unterstrich:
Ich zu tun hatte, gleich auf mehrere Eingaben, so dass ich aktualisiert wird @Endy Tjahjono Methode.
Es gibt ein array mit allen gelesenen Dateien.
Musste ich ändern, Endy-Richtlinie, so dass ich bekommen kann Zuletzt Geändert, lastModifiedDate, name, Größe, Typ und Daten, als auch in der Lage sein, um eine Reihe von Dateien. Für diejenigen von Euch, die benötigt diesen extra-features, hier gehen Sie.
UPDATE:
Ich habe einen Fehler gefunden, wo, wenn Sie wählen Sie die Datei(en) und gehen Sie dann zu wählen Sie wieder, aber stattdessen Abbrechen, die Dateien werden nie deaktiviert wie es scheint. Also ich aktualisierte mein code um das zu beheben.
Wenn Sie wollen etwas ein wenig mehr elegant/integriert, können Sie eine Dekorateur zu erweitern, die
input
Richtlinie mit Unterstützung fürtype=file
. Der wichtigste VORBEHALT zu beachten ist, dass diese Methode funktioniert nicht im IE9 seit IE9 nicht implementieren der Datei-API. Mit Hilfe von JavaScript upload von Binär-Daten, unabhängig von Art via XHR ist einfach nicht möglich nativ in IE9 oder älter (Verwendung vonActiveXObject
Zugriff auf das lokale Dateisystem nicht zählen, da die Verwendung von ActiveX ist nur zu Fragen, für Sicherheit sorgen).Diese exakte Methode erfordert auch eine AngularJS 1.4.x oder später, aber Sie können diese anpassen zu verwenden
$provide.decorator
eher alsangular.Module.decorator
- ich schrieb diese gist um zu demonstrieren, wie es zu tun, während in übereinstimmung mit John Papa ' s AngularJS style guide:Warum ist das nicht in Erster Linie getan? AngularJS-support ist zu erreichen, nur so weit zurück wie der IE9. Wenn Sie nicht einverstanden mit dieser Entscheidung und denke, Sie sollten einfach dieses sowieso, dann springt der Wagen an Angular 2+, weil besser moderne Unterstützung ist buchstäblich, warum Eckig 2 vorhanden ist.
Versuchen, diese,dies ist für mich arbeiten in angular JS