Ich versuche, Winkel zu erhalten, um den Inhalt einer Datei zu lesen, die der Benutzer über eine <input type="file"
Steuerung auswählt. Obwohl Winkel Richtlinien für Datei-Upload-Kontrollen nicht hat, sollte es leicht sein, dass zu beheben mit einem Aufruf an $apply
:HTML5 Datei-Upload mit AngularJS
function MyController($scope) {
$('#myFile').on('change', function() {
var that = this;
$scope.$apply(function() { $scope.files = that.files });
});
}
Leider wird das Ereignis nie ausgelöst. Es ist, als ob der Selektor nicht auf das richtige DOM-Element verweisen kann: Obwohl der Selektor das Element findet, ist die Liste der Dateien immer leer. Das passiert auch, wenn ich mit der js-Konsole herumstochere. Der DOM-Inspektor hat stattdessen die Dateiliste unter seinen Eigenschaften.
Es macht mich verrückt, aber die einzige Möglichkeit, die ich bisher habe, ist die Verwendung eines Inline-Event-Handlers, der eine globale Variable zuweist. Warum gibt der jquery-Selektor ein anderes Element zurück? Gibt es einen Vorlagen-Kompilierungs-Hokuspokus, der eckig macht, was Selektoren verwirrt? Hier
nett. Ich habe am Ende eine globale Funktion im Controller definiert und sie aus dem Inline Event Handler aufgerufen. Da $ scope im äußeren closure liegt, kann ich die Änderungen zumindest anwenden. Die Richtlinie ist definitiv eine eher "eckige" Art, dies zu tun. Aber die Frage lautet: Warum gibt der Selektor ein 'input'-Element zurück, das genau so aussieht wie das, mit dem der Benutzer interagiert, aber es ist tatsächlich nicht? – BruceBerry
mmmh das funktioniert nicht für mich. Wenn ich deinen Plunkr laufe, bekomme ich immer Dateien: { "0": {} } mache ich etwas falsch? – pomarc
@pomarc IIRC, es hat funktioniert ... Aber es scheint, dass moderne Browser nicht unterstützen, Dateiobjekt zu stringieren. Sie müssen direkt auf Eigenschaften zugreifen, um sie in Ihrer Ansicht anzuzeigen. – Tosh