В SPA с Angular и Breeze
У меня есть приложение SPA, которое использует угловые и легкие волны, что позволяет полевому персоналу создавать новые объекты и отправлять их в нашу ERP в режиме реального времени. Они могут делать снимки, а также загружать их (в настоящее время используются устройства iPad, iPhone и Galaxy). Это все работает просто отлично.
Теперь мы хотели бы изменить размеры изображений перед их загрузкой, чтобы сэкономить на пропускной способности, ускорить работу приложения и упростить прикрепление их к сообщениям электронной почты. Я получил plupload (2.1.2) для работы в качестве угловой директивы, и он отлично изменяет размеры / загружает изображения. Проблема в том, что когда создается новая сущность и страница "перезагружается", plupload больше не отвечает. Я использую следующее для поля ввода:
<input type="file"
capture="camera"
accept="image/*"
id="cameraInput"
pl-upload
pl-auto-upload="false"
pl-files-model="files"
pl-multi-params-model="multiParams"
pl-instance="uploadotron"
pl-entity="vm.report"
ng-file-select="vm.handleFile($files)"
ng-disabled="vm.state == 'Unchanged'" />
Опции, которые я использую для plupload:
var options = {runtimes: 'html5',
browse_button : 'cameraInput',
multi_selection: false,
container: 'uploadcontainer',
max_file_size: '20mb',
multiple_queues: false,
url : '.breeze/Files/Upload',
flash_swf_url : iAttrs.plFlashSwfUrl,
silverlight_xap_url : iAttrs.plSilverlightXapUrl,
filters: [{title : "Image files", extensions : "jpg,jpeg,gif,png,tiff,pdf"}],
resize: {
width: 1024,
height: 768,
crop: false,
quality: 90
}
}
В качестве частичного обходного пути я обнаружил, что передача объекта экземпляра (pl-instance="uploadotron" выше, где uploadotron присоединен к $scope в контроллере) в директиву позволяет мне вручную добавить файл и инициировать загрузку, но это только запускает ng-file-select при каждой второй попытке на iPad. Галактика работает правильно.
Итак, вопросы:
Почему перестанет работать plupload, когда будет добавлен новый объект, и как это исправить? Я добавил кучу операторов console.log и убедился, что инициализация plupload происходит через директиву при перезагрузке страницы, но событие browse больше не срабатывает. Если я полностью покину страницу и вернусь, она снова начнет работать. Это не совсем удобно для пользователя, хотя.
Почему iPad (Safari, iOS 7.1.1) должен вызывать функцию ng-file-select только при каждом втором выборе фото / файла?
Спасибо за любую помощь, которую вы можете оказать мне.
Обновить:
Я решил свою проблему с помощью FileAPI, найденного на github ( https://github.com/mailru/FileAPI/), и написал свою собственную директиву для его вызова. Работает как шарм сейчас. Я думаю, что часть проблемы заключалась в том, что ng-file-select является частью другой директивы, и я не сразу понял это. Это значит, что я по сути смешивал две директивы в одном элементе ввода.