首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue:在组件中使用自定义libary (pdf.js)

Vue:在组件中使用自定义libary (pdf.js)
EN

Stack Overflow用户
提问于 2017-10-05 06:33:28
回答 3查看 6.4K关注 0票数 2

如何在Vue组件中使用供应商libary (特别是我想使用PDF.js)?(我只想为这个特定的组件加载它,因为它们是相当大的文件)

我正在构建一个需要加载pdf的编辑器。因此,我将pdf.js和pdf.worker.js放在/src/pdf.worker.js/供应商/pdfjs中。

然后,我在同时加载组件的模板编辑器-page.hbs中加载这两个文件:

代码语言:javascript
复制
<div class="content">
  <div class="row fill">
    <div class="col-md-2 fill br pt30">
    </div>
    <div class="col-md-10 fill pt30 pl30 pr30">
      <div id="template-editor" class="template-editor">  
        <template-editor template-src="{{template.src}}"></template-editor>    
      </div>
    </div>
  </div>
</div>
<script src="/assets/js/template-editor.bundle.js"></script>
<script src="/assets/vendor/pdfjs/pdf.js"></script>
<script src="/assets/vendor/pdfjs/pdf.worker.js"></script>

to (我必须在这里加载它吗?):

代码语言:javascript
复制
import Vue from 'vue';
import templateEditor from './components/template-editor.vue';

new Vue({
  el: '#template-editor',
  components: { templateEditor }
});

现在,我想将文件加载到我的模板-editor.vue or.vue中:

代码语言:javascript
复制
<template>
    <!-- ... -->
</template>

<script>

  export default {
    props: ['templateSrc'],
    name: 'template-editor',
    data() {
      return {
        src: this.templateSrc
      };
    },
    methods: {
      render() {
        PDFJS.getDocument(this.$data.src).then(function(pdf) {
          console.log(pdf);
        }, err => console.log(err));
      }
    },
    created: function() {
      this.render();
    }
  };
</script>

但我说错了

代码语言:javascript
复制
ReferenceError: PDFJS is not defined

其他的一切似乎都很顺利。我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-05 08:29:40

谢谢你们的帮助。结果答案隐藏在第一个片段中:我在包之后导入pdfjs。但是由于包需要它,所以我需要在此之前导入它:

代码语言:javascript
复制
<script src="/assets/vendor/pdfjs/pdf.js"></script>
<script src="/assets/vendor/pdfjs/pdf.worker.js"></script>
<script src="/assets/js/template-editor.bundle.js"></script>

其实并不是那么复杂;)

票数 -1
EN

Stack Overflow用户

发布于 2017-10-05 07:16:30

我认为所缺少的只是组件中的一个导入语句,

更正尝试在下面的导入位置使用“@”。我忘了,你的组件可能在“src”的子文件夹中。还请参见下面关于的注意事项。

代码语言:javascript
复制
<script>
  import { PDFJS } from '@/assets/vendor/pdfjs/pdf.js'

  export default {
    props: ['templateSrc'],
    name: 'template-editor',
    ...

替代

既然您有webpack,您最好将pdfjs安装到节点模块(请参阅pdfjs-dist),并将其从‘./资产/供应商/pdfjs/pdj.js’中删除。

代码语言:javascript
复制
npm install pdfjs-dist

如果你这样做的话,进口就更“标准”了,

代码语言:javascript
复制
import { PDFJS } from 'pdfjs-dist'
票数 3
EN

Stack Overflow用户

发布于 2017-10-05 07:13:31

与用于供应商脚本的script标记不同,最好使用webpacks动态导入功能(https://webpack.js.org/guides/code-splitting/#dynamic-imports)在您的呈现函数中加载这个供应商库:

代码语言:javascript
复制
render() {
    import('/assets/vendor/pdfjs/pdf.js').then(PDFJS => {
        PDFJS.getDocument(this.$data.src).then(function(pdf) {
          console.log(pdf);
        }, err => console.log(err));
    }
}

要使import工作,您还必须安装这个babel插件http://babeljs.io/docs/plugins/syntax-dynamic-import/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46579229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档