Vue 模块引入远程Js

本文介绍如何在Vue组件中引入远程JavaScript文件,并在加载完成后执行特定逻辑。通过参考相关博客,利用render函数创建组件,动态添加script标签并监听其加载事件。同时提供组件的创建和外部调用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

要在vue的一个模块中引入远程的js,并在js加载完成之后处理一些逻辑

参考

各种搜索之后发现并没有我想要的那种解决方案,然后找了几个博客资料。感谢博主们的分享

创建组件

  • 使用render函数创建一个组件,使用createElement添加dom节点。

    components: {
      'remote-js': {
        render (createElement) {
          var self = this
          return createElement('script', {
            attrs: { type: 'text/javascript', src: this.src },
            on: {
              load: function () {
                console.log('load js')
                self.$emit('load-js-finish')
              }
            }
          })
        },
        props: {
          src: { type: String, required: true }
        }
      }
    },
    

    以上是创建组件的代码。描述:创建一个script标签添加script标签的属性,监听js加载完成的事件

  • 封装成组件方便外部调用

    <template>
      <remote-js :src="this.jsUrl" @load-js-finish="this.jsLoadCallBack"></remote-js>
    </template>
    
    <script>
      export default {
        components: {
          'remote-js': {
            render (createElement) {
              var self = this
              return createElement('script', {
                attrs: { type: 'text/javascript', src: this.src },
                on: {
                  load: function () {
                    console.log('load js')
                    self.$emit('load-js-finish')
                  }
                }
              })
            },
            props: {
              src: { type: String, required: true }
            }
          }
        },
        props: {
          jsUrl: { type: String, required: true },// 需要加载的外部url
          jsLoadCallBack: Function// 外部js加载完成回调
        }
      }
    </script>
    

使用

  • 外部调用

    <template>
      <remote-js :js-url="'http://cdn.ronghub.com/RongIMLib-2.2.5.js'" :js-load-call-back="loadRongJs"></remote-js>
    </template>
    
    <script>
    import RemoteJs from '@/components/RemoteJs'// 导入组件
    export default {
      components: {
        RemoteJs
      },
      methods: {
        loadRongJs() {
           // 当使用远程js里的内容时请添加"//eslint-disable-line"防止eslint检测报错
          console.log(RongIMLib) //eslint-disable-line
        }
      }
    }
    </script>
    
    <style>
    
    </style>
    

最后

希望大家多多指教

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值