Ich bin neu in eckig. Ich versuche, den hochgeladenen Dateipfad aus dem HTML-Feld "Datei" zu lesen, wenn in diesem Feld eine "Änderung" erfolgt. Wenn ich 'onChange' benutze, funktioniert es, aber wenn ich es mit 'ng-change' eckig benutze, funktioniert es nicht.
<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 () ruft niemals auf. Firebug zeigt auch keinen Fehler.
Antworten:
Keine Bindungsunterstützung für das Steuerelement zum Hochladen von Dateien
https://github.com/angular/angular.js/issues/1375
anstatt
kannst du es versuchen
und in deiner Funktion ändert sich statt
kannst du es versuchen
Im Folgenden finden Sie ein funktionierendes Beispiel für das Hochladen von Dateien mit Drag-Drop-Dateien. Das Hochladen von Dateien kann hilfreich sein. Http://jsfiddle.net/danielzen/utp7j/
Informationen zum Hochladen von Winkeldateien
URL für das Hochladen von AngularJS-Dateien in ASP.Net
http://cgeers.com/2013/05/03/angularjs-file-upload/
AngularJs nativer Upload mehrerer Dateien mit Fortschritten bei NodeJS
http://jasonturim.wordpress.com/2013/09/12/angularjs-native-multi-file-upload-with-progress/
ngUpload - Ein AngularJS-Dienst zum Hochladen von Dateien mit iframe
http://ngmodules.org/modules/ngUpload
quelle
sqren
Thema "Ich habe eine kleine Anweisung gemacht, um auf Änderungen bei der Dateieingabe zu warten.
JSFiddle anzeigen
view.html:
controller.js:
directive.js:
quelle
Dies ist eine Verfeinerung einiger der anderen, die Daten werden in einem ng-Modell enden, was normalerweise das ist, was Sie wollen.
Markup (erstellen Sie einfach eine Attribut-Datendatei, damit die Direktive sie finden kann)
JS
quelle
$scope.$apply();
erforderlich? Meineng-change
Veranstaltung scheint immer noch ohne sie zu feuern.Der saubere Weg besteht darin, eine eigene Direktive zu schreiben, um sie an das Ereignis "change" zu binden. Nur um Sie wissen zu lassen, dass IE9 FormData nicht unterstützt, sodass Sie das Dateiobjekt nicht wirklich aus dem Änderungsereignis abrufen können.
Sie können die ng-file-upload- Bibliothek verwenden, die IE bereits mit FileAPI-Polyfill unterstützt, und das Posten der Datei auf dem Server vereinfachen. Es verwendet eine Richtlinie, um dies zu erreichen.
JS:
quelle
Ich habe die Idee von @Stuart Axon erweitert, eine bidirektionale Bindung für die Dateieingabe hinzuzufügen (dh das Zurücksetzen der Eingabe durch Zurücksetzen des Modellwerts auf Null zu ermöglichen):
Demo
quelle
data-ng-click="vm.theFile=''"
funktioniert tatsächlich gut, keine Notwendigkeit, es in eine Controller-Methode zu schreibenÄhnlich wie bei einigen anderen guten Antworten hier habe ich eine Anweisung geschrieben, um dieses Problem zu lösen, aber diese Implementierung spiegelt die eckige Art des Anhängens von Ereignissen genauer wider.
Sie können die Direktive wie folgt verwenden:
HTML
Wie Sie sehen, können Sie die ausgewählten Dateien in Ihren Ereignishandler einfügen, so wie Sie ein $ event-Objekt in einen beliebigen ng-Ereignishandler einfügen würden.
Javascript
quelle
fileChange
Ausdruck einen zusätzlichen Parameter übergeben ? Ich verwende diese Direktive in einemng-repeat
und die übergebene$scope
VariableattrHandler
ist für jeden Datensatz gleich. Was ist die beste Lösung?Diese Anweisung übergibt auch die ausgewählten Dateien:
Der HTML-Code, wie man ihn benutzt:
In meinem Controller:
quelle
Ich empfehle eine Richtlinie zu erstellen
Diese Direktive kann mehrfach verwendet werden, verwendet ihren eigenen Bereich und hängt nicht vom übergeordneten Bereich ab. Sie können der Handlerfunktion auch einige Parameter zuweisen. Die Handlerfunktion wird mit dem Bereichsobjekt aufgerufen, das aktiv war, als Sie die Eingabe geändert haben. $ apply aktualisiert Ihr Modell jedes Mal, wenn das Änderungsereignis aufgerufen wird
quelle
Die einfachste Angular jqLite-Version.
JS:
HTML:
quelle
Arbeitsdemo der "Dateieingabe" -Richtlinie, die mit 1 funktioniert
ng-change
Damit ein
<input type=file>
Element mit der Direktive ng-change funktioniert , benötigt es eine benutzerdefinierte Direktive , die mit der Direktive ng-model funktioniert .Die DEMO
quelle
Zu vollständige Lösung basiert auf:
Eine einfache Möglichkeit, das Eingabefeld auszublenden und durch ein Bild zu ersetzen, hier nach einer Lösung, die ebenfalls einen Winkel-Hack erfordert, aber die Aufgabe erfüllt [TriggerEvent funktioniert nicht wie erwartet]
Die Lösung:
Wenn Sie auf das Bild klicken, simulieren Sie eine DOM-Aktion, indem Sie auf das Eingabefeld klicken. Et voilà!
quelle
Ich habe es so gemacht;
quelle
Eine weitere interessante Möglichkeit, Änderungen an der Dateieingabe abzuhören, besteht darin, das Attribut ng-model der Eingabedatei zu überwachen. Natürlich ist FileModel eine benutzerdefinierte Direktive.
So was:
HTML ->
<input type="file" file-model="change.fnEvidence">
JS Code ->
Hoffe es kann jemandem helfen.
quelle
Winkelelemente (z. B. das Stammelement einer Direktive) sind jQuery [Lite] -Objekte. Dies bedeutet, dass wir den Ereignis-Listener folgendermaßen registrieren können:
Dies ist die jQuery-Ereignisdelegierung. Hier wird der Listener an das Stammelement der Direktive angehängt. Wenn das Ereignis ausgelöst wird, sprudelt es bis zum registrierten Element und jQuery bestimmt, ob das Ereignis von einem inneren Element stammt, das mit dem definierten Selektor übereinstimmt. In diesem Fall wird der Handler ausgelöst.
Vorteile dieser Methode sind:
ng-if
oderng-switch
).http://api.jquery.com/on/
quelle
Sie können einfach den folgenden Code in onchange hinzufügen, um Änderungen zu erkennen. Sie können eine Funktion auf X-Klick oder etwas schreiben, um Dateidaten zu entfernen.
quelle