Vue 组件中如何引入外部的js文件

news/2024/10/17 21:17:02/

Vue 组件中如何引入外部的js文件

背景

在Vue中,通常我们引入一个js插件都是使用npm 方式下载然后import使用的。但是我现在本地有了js文件或者是一个远程js文件链接,我不想使用npm install xxx 的方式,有什么办法吗?

方式一

简单粗暴,直接在Vue项目的index.html 中使用全局的方式引入,比如:

<!DOCTYPE html>
<html><head><!-- ... 省略--><title>测评</title><link type="text/css" href="//at.alicdn.com/t/font_43459_d124thd3lgu.css" rel="stylesheet">{{ie9 /resources/js/history.min.js}}
</head><body><div id="cp-app" v-cloak></div>
</body>
<script src="../xxx.js"></script> // 暴力引入
</html>

缺点:

不使用该js插件的组件也会加载,而我只想在某个Vue组件中使用该js插件。 

方式二

如果是下载到本地的静态文件,可以使用 import 的方式导入。

import { xxx } from '../js/xxx.js' //注意路径

缺点:

下载的本地静态文件才可以,远程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> 在页面中调用

使用的时候,使用 <xxx-js></xxx-js> 在页面中调用。

方式五

高阶玩法。将方式三包装成一个js插件,使用 Promise,js加载成功,调用resolve,js加载失败,调用reject。

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

使用方式:

import loadJs from './loadJs'export default {mounted(){loadJs('http://api.map.baidu.com/xxx.js').then(()=>{// 加载成功,进行后续操作})}
}

方式六

更高阶方式。可以动态替换要加载的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}}
});

使用方式:

// 引入
import 'common/importJs.js'
// html使用的地方
<remote-script src="https://pv.sohu.com/cityjson?ie=utf-8"></remote-script>

 

https://zhuanlan.zhihu.com/p/379504188


http://www.ppmy.cn/news/1103823.html

相关文章

抖音小程序开发教学系列(5)- 抖音小程序数据交互

第五章&#xff1a;抖音小程序数据交互 5.1 抖音小程序的网络请求5.1.1 抖音小程序的网络请求方式和API介绍5.1.2 抖音小程序的数据请求示例和错误处理方法 5.2 抖音小程序的数据缓存和本地存储5.2.1 抖音小程序的数据缓存机制和使用方法5.2.2 抖音小程序的本地存储和数据持久化…

【深度学习】 Python 和 NumPy 系列教程(七):Python函数

目录 一、前言 二、实验环境 三、Python函数基础 1. 定义函数 2. 参数传递 3. 函数调用 4. 返回值 5. 函数文档字符串 四、将函数存储在模块中 1. 创建模块 2. 导入模块 a. import 模块名 b. from 模块名 import 函数名 c. from 模块名 import * 五、多种形式的…

多语言开发(vant

参考&#xff1a;https://blog.csdn.net/qq_44649801/article/details/131878128?spm1001.2014.3001.5506 一、抛出字段对象A export default { } 二、引入汇总文件&#xff0c;&#xff08;主要的是 模块分割 汇总&#xff0c;对A 等的处理 export default { A&#xff0c;B,…

微信小程序云开发数据懒加载+打破云数据库返回数据条数限制

目录 数据懒加载 打破数据表返回条数限制 数据懒加载 show.wxml <view wx:for="{{Adata}}" wx:key="index" style="padding: 80rpx 10rpx 140rpx;border-bottom: rgb(109, 134, 134) 2px solid;"><view style="margin-left: 20…

什么?这个策略可以加速大模型推理2-2.5倍以上?

今天我要分享的是deepmind团队的文章《Accelerating Large Language Model Decoding with Speculative Sampling》 代码 https://github.com/shreyansh26/Speculative-Sampling 背景 short continuations 指在给定的文本中&#xff0c;后续的一小段文本 the latency of p…

DQN算法概述及基于Pytorch的DQN迷宫实战代码

一. DQN算法概述 1.1 算法定义 Q-Learing是在一个表格中存储动作对应的奖励值&#xff0c;即状态-价值函数Q(s,a)&#xff0c;这种算法存在很大的局限性。在现实中很多情况下&#xff0c;强化学习任务所面临的状态空间是连续的&#xff0c;存在无穷多个状态&#xff0c;这种情…

【深度学习】 Python 和 NumPy 系列教程(八):Python类

目录 一、前言 二、实验环境 三、Python类&#xff08;Class&#xff09; 1、初始化方法&#xff08;__init__&#xff09; 2、属性和实例变量 3、方法和实例方法 4、继承 5、多态 6、类变量和静态方法 7、魔术方法 一、前言 Python是一种高级编程语言&#xff0c;由…

Gurobi使用(一)——操作指南(转自知乎)

好像还是要学一下Gurobi如何使用的&#xff0c;不然这代码着实有点抽象了 一、入门操作 一般来说&#xff0c;求解一个数学规划模型的时候&#xff0c;通常会按照如下步骤解决问题: 设置变量---addVar()。 更新变量空间---update()。 设定目标函数---setObjective()。 设定约…