AngularJS дождаться полной загрузки элемента

В настоящее время я работаю над реализацией 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, потому что средство просмотра загружено не полностью. Это происходит с перерывами.

Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
1
0
809
3

Ответы 3

Я считаю, что следующий код имеет больше смысла

   $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);
      }
    }

проблема в том, что мне также нужно следить за URL-адресом, потому что при изменении поля URL-адреса загружается новый документ. Я понимаю, что вы имеете в виду под просмотром для зрителя, но как насчет URL, мне нужны двое часов?

jedgard 24.01.2019 14:54

@jedgard Я обновил ответ, просто добавил, что newVal !== oldVal

Lunin Roman 24.01.2019 14:56

Проблема с этим ответом заключается в том, что средство просмотра все еще может быть не загружено/готово даже после запуска обратного вызова $watch. Таким образом, вызов viewer.loadDocument может вызвать исключение. Не уверен, что делает $watch, но, по крайней мере, вам также нужно будет прослушать событие готовности WebViewer. См. ответ @Yasser.

Ryan 24.01.2019 21:11

Вы можете использовать тайм-аут javascript.

setTimeout(function(){
       // You can write functions that will load after Angular elements.
},500);

Должен ждать события, а не жестко запрограммированного тайм-аута. Потенциально, скажем, с большой задержкой и очень медленным / занятым устройством, вы можете превысить время ожидания, поэтому случайная ошибка все равно будет происходить. Это просто делает его менее вероятным за счет произвольного/ненужного времени ожидания.

Ryan 24.01.2019 21:07

Вы хотите дождаться события готовности 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

Другие вопросы по теме