Я пытался использовать ng-модель на входной тег с типом файла:
<input type="file" ng-model="vm.uploadme" />
Но после выбора файла в контроллере $ scope.vm.uploadme все еще не определен.
Как получить выбранный файл в моем контроллере?
angularjs
angularjs-ng-model
angularjs-fileupload
Энди Тяхджоно
источник
источник
Ответы:
Я создал обходной путь с директивой:
И тег ввода становится:
Или, если нужно только определение файла:
источник
Я использую эту директиву:
и вызвать его так:
Свойство (editItem.editItem._attachments_uri.image) будет заполнено содержимым файла, выбранного в качестве data-uri (!).
Обратите внимание, что этот скрипт не будет загружать ничего. Это только заполнит вашу модель содержимым вашего файла, закодированного в data-uri (base64).
Проверьте рабочую демонстрацию здесь: http://plnkr.co/CMiHKv2BEidM9SShm9Vv
источник
ngModel
«s$render
функцию?Как включить
<input type="file">
работу сng-model
Рабочая демонстрация директивы, которая работает с
ng-model
Основная
ng-model
директива не работает<input type="file">
из коробки.Этот обычай директива включает
ng-model
и имеет дополнительное преимущество, позволяяng-change
,ng-required
иng-form
директивы для работы с<input type="file">
.источник
Это дополнение к решению @ endy-tjahjono.
Я оказался не в состоянии получить значение uploadme из области. Несмотря на то, что uploadme в HTML был явно обновлен директивой, я все еще не мог получить доступ к его значению с помощью $ scope.uploadme. Я был в состоянии установить его значение из области, хотя. Таинственный, правда ..?
Как оказалось, директива создала дочернюю область, а у дочерней области была собственная загрузка .
Решением было использование объекта, а не примитива для хранения значения uploadme .
В контроллере у меня есть:
и в HTML:
Нет никаких изменений в директиве.
Теперь все работает как ожидалось. Я могу получить значение uploadme.src из моего контроллера, используя $ scope.uploadme.
источник
$scope.uploadme = { src: '' }
Привет, ребята, я создаю директиву и зарегистрирован на беседке.
Эта библиотека поможет вам моделировать входной файл, не только возвращать данные файла, но и файл dataurl или base 64.
https://github.com/mistralworks/ng-file-model/
Надеюсь поможет тебе
источник
reader.readAsDataURL
Метод является устаревшим. Современный код использует URL.create ObjectURL () .Это немного измененная версия, которая позволяет вам указать имя атрибута в области, так же, как вы сделали бы это с использованием ng-model, using:
Директива:
источник
Для ввода нескольких файлов с использованием lodash или подчеркивания:
источник
источник
Я должен был сделать то же самое на нескольких входах, поэтому я обновил метод @Endy Tjahjono. Возвращает массив, содержащий все прочитанные файлы.
источник
Мне пришлось изменить директиву Энди, чтобы я мог получить Last Modified, lastModifiedDate, имя, размер, тип и данные, а также получить массив файлов. Для тех из вас, кто нуждался в этих дополнительных функциях, здесь вы идете.
ОБНОВЛЕНИЕ: Я нашел ошибку, при которой, если вы выбираете файл (ы), а затем переходите к выбору снова, но вместо этого отменяете, файлы никогда не отменяются, как кажется. Поэтому я обновил свой код, чтобы это исправить.
источник
Если вы хотите что-то более элегантное / интегрированное, вы можете использовать декоратор для расширения
input
директивы с поддержкойtype=file
. Основное предостережение, которое следует иметь в виду, заключается в том, что этот метод не будет работать в IE9, поскольку IE9 не реализовывал File API . Использование JavaScript для загрузки двоичных данных независимо от типа через XHR изначально невозможно в IE9 или более ранних версиях (использованиеActiveXObject
доступа к локальной файловой системе не считается, так как использование ActiveX просто вызывает проблемы с безопасностью).Этот точный метод также требует AngularJS 1.4.x или более поздней версии, но вы, возможно, сможете адаптировать его для использования,
$provide.decorator
а неangular.Module.decorator
- я написал эту суть, чтобы продемонстрировать, как это сделать, в соответствии с руководством по стилю AngularJS Джона Папы :Почему это не было сделано в первую очередь? Поддержка AngularJS предназначена только для IE9. Если вы не согласны с этим решением и считаете, что в любом случае им следовало бы просто вставить это, переходите на Angular 2+, потому что лучшая современная поддержка - это буквально то, почему существует Angular 2.
источник
Попробуйте это, это работает для меня в угловой JS
источник