У меня есть угловое приложение, в котором я сохраняю файл в формате pdf. Что я хочу сделать, так это то, что когда пользователь нажимает кнопку сохранения, кнопка сохранения исчезает во время создания файла, так что пользователь не нажимает кнопку несколько раз.кнопка переключения в угловом не работает
Что у меня есть
function toggleSavingPdf(){
return scope.savingPdf = !scope.savingPdf;
}
function saveToPdf(){
toggleSavingPdf();
var doc = new jsPDF();
scope.docs.forEach(function(img, idx){
if(img.src){
console.log('index of page', idx);
if(idx>0) doc.addPage();
doc.addImage(img.src,'png',0, 0, 210, 290);
}
if(idx===scope.docs.length-1){
console.log('change saving', scope.savingPdf);
toggleSavingPdf(); }
});
doc.save('Kiosk.pdf');
}
и в моем шаблоне у меня есть
<div id="document-list" ng-show="savingPdf">
но документ-список никогда не скрывает, если я не изменить ng-show
к ng-hide
, в этом случае он никогда не показывает ,
Я попытался запустить scope.$apply()
после каждого toggleSavingPdf()
, но он говорит мне, что подача заявки уже выполняется.
Это должно быть возможно. Для создания pdf требуется около 3 секунд, поэтому достаточно времени, чтобы пользователь несколько раз нажал кнопку.
thatnks @floribon, но 'doc.save' и' doc.addImage' или любая из функций jsPDF не являются асинхронными. Я бы хотел, чтобы они были и попытались использовать их асинхронно изначально. – pedalpete
@pedalpete Я вижу, я обновил свой ответ в случае, когда doc.save фактически синхронно. Вам нужно убедиться, что кнопка отключена * до * вы сохраняете PDF (который занимает 3 секунды, если я правильно понимаю) – floribon
Это действительно работало @floribon, единственное изменение, которое я должен был сделать, это то, что мне пришлось добавить время тайм-аут. Я использовал 1000. Как ни странно, загрузка файла занимает 3 секунды, но $ timeout знает, дождаться завершения функции. По какой-то причине работа с меньшим таймаутом не работала. Странно ... Но это работает. – pedalpete