Я новичок в угловой. Я пытаюсь прочитать путь к загруженному файлу из поля «файл» HTML всякий раз, когда в этом поле происходит «изменение». Если я использую 'onChange', он работает, но когда я использую его угловым способом, используя 'ng-change', он не работает.
<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 () никогда не вызывает. Firebug также не показывает никаких ошибок.
Ответы:
Нет обязательной поддержки для контроля загрузки файлов
https://github.com/angular/angular.js/issues/1375
вместо того
ты можешь попробовать
и в твоей функции меняется вместо
ты можешь попробовать
Ниже приведен один из рабочих примеров загрузки файлов с возможностью перетаскивания. Http://jsfiddle.net/danielzen/utp7j/
Угловая информация о загрузке файла
URL для загрузки файла AngularJS в ASP.Net
http://cgeers.com/2013/05/03/angularjs-file-upload/
Нативная многофайловая загрузка AngularJ с прогрессом с NodeJS
http://jasonturim.wordpress.com/2013/09/12/angularjs-native-multi-file-upload-with-progress/
ngUpload - Сервис AngularJS для загрузки файлов с использованием iframe
http://ngmodules.org/modules/ngUpload
источник
sqren
решение ... ... ... @ 0MV1Я сделал небольшую директиву для прослушивания изменений ввода файла.
Посмотреть JSFiddle
view.html:
controller.js:
directive.js:
источник
Это уточнение некоторых других, данные в конечном итоге окажутся в ng-модели, которая обычно является тем, что вы хотите.
Разметка (просто создайте файл данных атрибута, чтобы директива могла его найти)
JS
источник
$scope.$apply();
требуется? Моеng-change
событие до сих пор, кажется, без него.Чистый способ - написать собственную директиву для привязки к событию «change». Просто чтобы вы знали, что IE9 не поддерживает FormData, поэтому вы не можете получить объект file из события change.
Вы можете использовать библиотеку ng-file-upload, которая уже поддерживает IE с полиафиллом FileAPI и упрощает отправку файла на сервер. Для этого используется директива.
JS:
источник
Я расширил идею @Stuart Axon по добавлению двухсторонней привязки для ввода файла (т. Е. Разрешить сброс ввода путем сброса значения модели обратно на ноль):
демонстрация
источник
data-ng-click="vm.theFile=''"
работает хорошо, нет необходимости записывать ее в метод контроллераПодобно некоторым другим хорошим ответам здесь, я написал директиву для решения этой проблемы, но эта реализация более близко отражает угловой способ прикрепления событий.
Вы можете использовать директиву так:
HTML
Как видите, вы можете вставить файлы, выбранные в ваш обработчик событий, так же, как вы вставили бы объект $ event в любой обработчик событий ng.
Javascript
источник
fileChange
выражение? Я использую эту директиву внутриng-repeat
и$scope
переменная передаетсяattrHandler
одинаково для каждой записи. Какое лучшее решение?Эта директива также передает выбранные файлы:
HTML, как его использовать:
В моем контроллере:
источник
Я рекомендую создать директиву
эта директива может использоваться много раз, она использует свою собственную область и не зависит от родительской области. Вы также можете передать некоторые параметры функции-обработчику. Функция-обработчик будет вызываться с объектом области видимости, который был активен при изменении ввода. $ apply обновляет вашу модель каждый раз, когда вызывается событие изменения
источник
Простейшая версия Angular jqLite.
JS:
HTML:
источник
Рабочая демонстрация директивы «file-input», которая работает с
ng-change
1Чтобы заставить
<input type=file>
элемент работать с директивой ng-change , ему нужна пользовательская директива, которая работает с директивой ng-model .ДЕМО
источник
Слишком полное решение основано на:
Простой способ скрыть поле ввода и заменить его изображением, здесь после решения, которое также требует взлома angular, но выполняет свою работу [TriggerEvent не работает должным образом]
Решение:
При нажатии на изображение имитирует действие DOM «щелкнуть» в поле ввода. И вуаля!
источник
Я сделал это так;
источник
Другой интересный способ прослушивания изменений ввода файла - наблюдение за атрибутом ng-model входного файла. Конечно, FileModel - это пользовательская директива.
Как это:
HTML ->
<input type="file" file-model="change.fnEvidence">
Код JS ->
Надеюсь, что это может кому-то помочь.
источник
Угловые элементы (такие как корневой элемент директивы) являются объектами jQuery [Lite]. Это означает, что мы можем зарегистрировать прослушиватель событий следующим образом:
Это делегирование события jQuery. Здесь слушатель присоединен к корневому элементу директивы. Когда событие инициируется, оно всплывет до зарегистрированного элемента, и jQuery определит, произошло ли событие на внутреннем элементе, соответствующем определенному селектору. Если это произойдет, обработчик сработает.
Преимущества этого метода:
ng-if
илиng-switch
)http://api.jquery.com/on/
источник
Вы можете просто добавить приведенный ниже код в onchange, и он обнаружит изменения. Вы можете написать функцию на X click или что-то, чтобы удалить данные файла ..
источник