简单粗暴,直接在Vue项目的 index.html 中使用全局的方式引入,比如:
index.html
<!DOCTYPE html> <!-- ... 省略--> <title>帮BOSS | 测评</title> <link type="text/css" href="//at.alicdn.com/t/font_43459_d124thd3lgu.css" rel="stylesheet"> {{ie9 /resources/js/history.min.js}} </head> <div id="cp-app" v-cloak></div> </body> <script src="../xxx.js"></script> // 暴力引入 </html>
缺点:不使用该js插件的组件也会加载,而我只想在某个Vue组件中使用该js插件。
如果是下载到本地的 静态文件 ,可以使用 import 的方式导入。
import
import { xxx } from '../js/xxx.js' //注意路径
缺点:下载的静态文件才可以
在Vue组件加载完后,手动操作DOM插入js插件。
export default { mounted() { let script = document.createElement('script'); script.type = 'text/javascript'; script.src = '你的js文件地址'; document.body.appendChild(script);
该方式直接操作DOM,只在当前组件插入js插件。
使用render方法
export default { components: { 'xxx-js': { render(createElement) { return createElement( 'script', attrs: { type: 'text/javascript', src: '你的js文件地址', // 使用 <xxx-js></xxx-js> 在页面中调用
高阶玩法。将 方式三 包装成一个js插件,使用 Promise ,js加载成功,调用resolve,js加载失败,调用reject。
方式三
Promise
function loadJs(src) { return new Promise((resolve,reject)=>{ let script = document.createElement('script'); script.type = "text/javascript"; script.src= src; document.body.appendChild(script); script.onload = ()=>{ resolve(); script.onerror = ()=>{ reject(); export default loadJs
更高阶方式。可以动态替换要加载的js文件。
包装一个 importJs.js 插件。
importJs.js
// 导入外部js import Vue from 'vue' Vue.component('remote-script', { render: function (createElement) { var self = this; return createElement('script', { attrs: { type: 'text/javascript', src: this.src on: { load: function (event) { self.$emit('load', event); error: function (event) { self.$emit('error', event); readystatechange: function (event) { if (this.readyState == 'complete') { self.$emit('load', event); props: { src: { type: String, required: true