В настоящее время я работаю над реализацией pdftron, и похоже, что webviewer загружается недостаточно быстро в тот момент, когда webviwer пытается загрузить документ. Как бы вы установили какой-то готовый элемент, чтобы он ждал, пока webViewer не будет готов загрузить документ?
viewer = new PDFTron.WebViewer({
path: 'WebViewer',
type: 'html5',
documentType: 'pdf'
}, element);
$scope.watch('url', function(blobVal) {
viewer.loadDocument(blobVal);
}
Я получаю неопределенное значение для viewer.loadDocument, потому что средство просмотра загружено не полностью. Это происходит с перерывами.


Я считаю, что следующий код имеет больше смысла
$scope.viewer = new PDFTron.WebViewer({
path: 'WebViewer',
type: 'html5',
documentType: 'pdf'
}, element);
$scope.$watch('viewer', function(newVal, oldVal) {
if (newVal instanceof Blob && newWal !== oldVal) {
viewer.loadDocument(newVal);
}
}
@jedgard Я обновил ответ, просто добавил, что newVal !== oldVal
Проблема с этим ответом заключается в том, что средство просмотра все еще может быть не загружено/готово даже после запуска обратного вызова $watch. Таким образом, вызов viewer.loadDocument может вызвать исключение. Не уверен, что делает $watch, но, по крайней мере, вам также нужно будет прослушать событие готовности WebViewer. См. ответ @Yasser.
Вы можете использовать тайм-аут javascript.
setTimeout(function(){
// You can write functions that will load after Angular elements.
},500);
Должен ждать события, а не жестко запрограммированного тайм-аута. Потенциально, скажем, с большой задержкой и очень медленным / занятым устройством, вы можете превысить время ожидания, поэтому случайная ошибка все равно будет происходить. Это просто делает его менее вероятным за счет произвольного/ненужного времени ожидания.
Вы хотите дождаться события готовности WebViever. Пожалуйста, смотрите руководство ниже: https://www.pdftron.com/documentation/web/guides/fundamentals/webviewer#details-of-instantiation
var myWebViewer = new PDFTron.WebViewer({
initialDoc: 'mydoc.pdf',
ui: 'legacy'
}, viewerElement);
viewerElement.addEventListener('ready', function() {
// API functions are now ready to be called on myWebViewer
});
См. также следующую ссылку: https://www.pdftron.com/api/web/PDFTron.WebViewer.html#event:ready__anchor
проблема в том, что мне также нужно следить за URL-адресом, потому что при изменении поля URL-адреса загружается новый документ. Я понимаю, что вы имеете в виду под просмотром для зрителя, но как насчет URL, мне нужны двое часов?