vue如何引用外部js_引入外部js文件

vue如何引用外部js_引入外部js文件背景在Vue中,通常我们引入一个js插件都是使用npm方式下载然后import使用的。但是我现在本地有了js文件或者是一个远程js文件链接,我不想使用npminstallxxx的方…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

背景

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

方式一

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

<!DOCTYPE html>
<html>
<head>
    <!-- ... 省略-->
    <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>
<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' //注意路径

缺点:下载的静态文件才可以

方式三

在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。

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 '../../utils/base/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://javaforall.net/184620.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于惠普笔记本电源已接通但不能把电充满

    关于惠普笔记本电源已接通但不能把电充满首先遇到这种情况大家不要慌,不要老想着自己笔记本的什么零件或者什么硬件坏了,如果电量维持在95~100%之间都是正常,因为电池会有一个自我保护的功能,它有一个充电阈值,会使它充的电不超过这个值,还有人专门设置把电量设置在50%左右,朋友的联想电脑好像是可以下载一个联想电脑管家,可以用来调充电阈值,但是貌似惠普的这个充电阈值是不可调的(惠普的这个设定让人无力吐槽)。就像这样插上电源还是这样,…

    2022年8月12日
    6
  • html5开发手机端网页(移动端web开发的几种方式)

    最近一直在研究移动手机网站的开发,发现做手机网站没有想象中的那么难。为什么会这么说呢?我们试想下:我们连传统的PC网站都会做,难道连一个小小的手机网站难道都搞不定吗?其实手机网站就是一个微缩版的PC网站罢了!至于为什么觉得难、觉得无从下手。段亮觉得有以下几点:一、没有完整的思路和流程就像做网站的流程一样,如果你能知道它的流程,我相信就不会觉得做手机网站难!真正难的是你没有思

    2022年4月18日
    52
  • Java经典设计模式之十一种行为型模式(附实例和详解)

    Java经典设计模式之十一种行为型模式(附实例和详解)

    2020年11月12日
    166
  • 好用的免杀远控_延迟低的远程控制软件

    好用的免杀远控_延迟低的远程控制软件能测试的,私联系。

    2025年8月2日
    5
  • hadoop生态圈的理解「建议收藏」

    hadoop生态圈的理解「建议收藏」 hadoop部分:hadoop生态圈的理解(HDFS,MapReduce,HBASE,zookeeper,hive,sqoop,flume,kafka,yarn,spark) 一、简介&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&am

    2022年5月22日
    26
  • 离线数仓和实时数仓架构与设计

    离线数仓和实时数仓架构与设计前言:离线数仓和实时数仓架构与设计讲解离线数仓和实时数仓架构与设计一、数仓架构演变(场景驱动)二、离线大数据架构三、离线数仓分层四、离线大数据架构典型案例1、Lambda架构1.Lambda架构2.Lambda架构进一步了解3.Lambda架构典型案例4.Lambda架构典型案例(有赞广告团,基于Druid)5.Lambda架构存在的问题2、Kappa架构1.Kappa架构典型案例2.Kappa架构典型案例(一Kylin为例)3.Kappa架构的重新处理过程3、Lambda架构vsKappa架构的对比

    2022年5月10日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号