Próbuję uzyskać kątowy odczyt zawartości pliku, który użytkownik wybiera za pomocą kontrolki <input type="file"
. Nawet jeśli nie ma kątowy wytyczne dotyczące kontroli przesyłania plików, to powinno być łatwe do ustalenia, że przy wywołaniu $apply
:Przesyłanie pliku HTML5 za pomocą AngularJS
function MyController($scope) {
$('#myFile').on('change', function() {
var that = this;
$scope.$apply(function() { $scope.files = that.files });
});
}
Niestety, zdarzenie nie jest zwolniony. To tak, jakby selektor nie mógł odwołać się do prawidłowego elementu DOM: mimo że selektor znajduje element, lista plików jest zawsze pusta. Zdarza się to również, gdy przeglądam konsolę js. Inspektor DOM zamiast tego ma listę plików wśród swoich właściwości.
To doprowadza mnie do szału, ale jedyny sposób, w jaki mam to do tej pory, to użycie wbudowanej obsługi zdarzeń, która przypisuje zmienną globalną. Dlaczego selektor jquery zwraca inny element? Czy jest jakaś kompilacja szablonów, mumbo-jumbo, która powoduje, że mylić selektory?
ładny. Zakończyłem definiując globalną funkcję w kontrolerze i wywołując ją z wbudowanego modułu obsługi zdarzeń. Ponieważ zakres $ jest w zewnętrznym zamknięciu, przynajmniej mogę $ zastosować zmiany. Dyrektywa jest zdecydowanie bardziej "kanciastym" sposobem na zrobienie tego. Ale pytanie brzmi: dlaczego selektor zwraca element 'input', który wygląda dokładnie tak, jak ten, z którym użytkownik wchodzi w interakcję, ale tak naprawdę nie jest? – BruceBerry
mmmh to nie działa dla mnie. jeśli uruchomię twój plunkr, zawsze otrzymuję pliki : { "0": {} } czy coś nie tak? – pomarc
@pomarc IIRC, kiedyś działało ... Wygląda jednak na to, że nowoczesne przeglądarki nie obsługują wiązania obiektu File. Musisz bezpośrednio uzyskać dostęp do właściwości, aby pokazać je w widoku. – Tosh