AngularJS等待元素完全加载

AngularJS等待元素完全加载,angularjs,angular-directive,pdftron,Angularjs,Angular Directive,Pdftron,我目前正在开发pdftron实现,在webviwer尝试加载文档时,webviewer的加载速度似乎不够快。如何设置某种就绪元素,使其等待webViewer准备加载文档 viewer = new PDFTron.WebViewer({ path: 'WebViewer', type: 'html5', documentType: 'pdf' }, element); $scope.watch('url', function

我目前正在开发pdftron实现,在webviwer尝试加载文档时,webviewer的加载速度似乎不够快。如何设置某种就绪元素,使其等待webViewer准备加载文档

    viewer = new PDFTron.WebViewer({
        path: 'WebViewer',
        type: 'html5',
        documentType: 'pdf'
    }, element);

    $scope.watch('url', function(blobVal) {
      viewer.loadDocument(blobVal);
    }

我在viewer.loadDocument及其上得到一个未定义的文件,因为viewer未完全加载。它是间歇性发生的。

我相信下面的代码更有意义

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

您可以使用javascript超时

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

您想等待WebViever就绪事件。请参阅以下指南:

另请参阅以下链接:

问题是,我还需要注意url,因为当url字段更改时,它会加载一个新文档。我明白你说的“观看查看器”是什么意思,但是url呢?我需要两块手表吗?@jedgard我更新了答案,只是添加了检查
newVal!==oldVal
这个答案的问题是,即使触发$watch回调,查看器仍可能未加载/准备就绪。因此,调用viewer.loadDocument仍可能引发异常。不确定$watch的功能,但至少您还需要收听WebViewer就绪事件。请参阅@Yasser answer。应等待事件,而不是硬编码超时。潜在的情况是,如果延迟不好,设备非常慢/忙,您可能会超过超时时间,因此仍然会发生随机错误。这只会降低这种可能性,但要以任意/不必要的等待时间为代价。
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
});