2017-07-17 119 views
6

我是Vue.js和web-pack的新手,所以我决定使用vue-cli(webpack)搭建一个初始应用程序。我试图将一个外部脚本(例如<script src="...")包含在全局不需要的模板中(对于每个页面/组件),但Vue警告这不允许。在vue.js模板中包含外部脚本

我的index.html文件是类似于初始生成一个:

<html lang="en"> 

<head> 
    <title>App</title> 
    <!-- Required meta tags --> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 

    <!-- Bootstrap CSS --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> 

</head> 

<body> 
    <div id="app"></div> 

    <!-- jQuery first, then Tether, then Bootstrap JS. --> 
    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script> 
</body> 

</html> 

我App.vue也类似于生成的一个:

<template> 
<div id="app"> 

    <div class="container pt-5"> 
    <router-view></router-view> 
    </div> 

</div> 
</template> 

我有一个在我的路由文件中路由到/upload,该文件映射到需要dropzone.js(外部脚本)的Upload组件。我可以将它包含在我的index.html中,类似于引导程序的加载方式,但是只有当这个组件需要时才加载每个页面/组件,似乎并不理想。

然而,如上所述,我只是大炮它列入我的模板文件,例如:

<template> 
<div> 
    <h2>Upload Images</h2> 
    <form action="/file-upload" class="dropzone"> 
    <div class="fallback"> 
     <input name="file" type="file" multiple /> 
     <input type="submit" value="upload" /> 
    </div> 
    </form> 
</div> 

<script src="https://example.com/path/to/dropzone"></script> 
</template> 

<script> 
export default { 
    data() { 
    return {} 
    } 
} 
</script> 

<style> 
</style> 

我如何可以包括只有一个组件外部脚本?

回答

1

脚本标记本质上是全局性的。在模板中包含脚本标记并不是如何处理模块系统(至少现在)。

您可以使用npm,npm install dropzone --save作为节点模块进行安装。

然后将其导入到组件代码中。

import drozone from 'dropzone'; 
export default { 
    // Component code... 
} 

但是,要知道,包将包含在每一页悬浮窗,除非你正在使用的WebPack代码分裂功能。请参阅here了解有关如何使用Vue路由器拆分软件包的官方教程。

+0

我希望会有一个办法只能加载资源作为模板呈现(没有代码与webpack分离) –

+0

@AshleyB不,你应该使用webpack动态导入功能。 – Cobaltway

+0

这需要在本地安装dropzone,是否没有任何方式将其用作外部资源? –

1

可以定义将负责脚本加载并调用它在安装或创建的钩状下面的方法:

<script> 
     export default { 
     data() { 
      return {} 
     }, 
     methods: { 
      loadJs(url, callback) { 
      jQuery.ajax({ 
       url: url, 
       dataType: 'script', 
       success: callback, 
       async: true 
      }); 
      } 
     }, 
     mounted() { 
      this.loadJs('url_to_someScript.js', function() { 
      //Stuff to do after someScript has loaded 
      }); 
     } 
     } 
</script> 
+0

请试试这个,告诉我它是否适合你。 –

+1

它可以工作,但'method'应该是'methods'。我试图编辑它,但它不会让你保存,除非你至少改变了6个字符。 – Adam

相关问题