httpVueLoader使用示例(用于cdn引入vue2后在html文件中使用组件开发)

本文介绍如何在HTML文件中引入Vue2组件,通过httpVueLoader.js实现前端开发。在维护一个使用原生JavaScript和jQuery的老项目时,作者引入Vue2并面临无法进行组件化开发的问题。通过httpVueLoader,可以在HTML直接导入和使用Vue组件,简化代码结构。

前言:现在在维护公司的老项目,用的原生+jq开发,太麻烦,我就引入了vue2,但是发现无法组件开发,代码也不是多好看,首页代码更是好几千行。于是找了这个在html上也能导入并使用vue组件的办法。

首先百度下载httpVueLoader.js,没有的话新建js文件粘贴也行,代码有点长,放最后面了,先放上使用代码

html文件(样式啥的直接忽略,懒得删了):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, minimal-ui"/>
  <meta name="apple-mobile-web-app-capable" content="yes"/>
  <meta name="apple-mobile-web-app-status-bar-style" content="black"/>
  <meta name="format-detection" content="telephone=no, email=no"/>
  <link rel="stylesheet" href="../../store/css/vant2.css">
  <script type="text/javascript" src="../../store/plugin/jquery-3.4.1.min.js"></script>
  <script src="../../store/js/vue.min.js" type="text/javascript" charset="utf-8"></script>
<!--  引入vue文件子组件必备js-->
  <script src="js/httpVueLoader.js" type="text/javascript" charset="utf-8"></script>
  <script type="text/javascript" src="../../store/js/vant2.js"></script>
</head>
<style>
  [v-cloak] {
    display: none;
  }
  *{
    margin: 0;
    padding: 0;
    /* 设置的边框和内边距的值时包含在总宽高内的 */
    box-sizing: border-box;
  }
  /*隐藏滚动条*/
  ::-webkit-scrollbar {
    display: none
  }
  /*看那个加载更多显示的位置对不对而改样式*/
  .layui-flow-more{
    width: 100%;
    /*position: absolute;*/
  }
  .layui-carousel-ind{
    /*text-align: left;*/
    /*padding-left: 3vw;*/
  }
  .layui-carousel-ind ul{
    background: none;
  }
  .layui-carousel-ind li{
    width: 20px;
    height: 6px;
    border-radius: 5px;
  }


  /*超出隐藏,三个点显示文字样式*/
  /*overflow:hidden;*/
  /*text-overflow:ellipsis;*/
  /*white-space:nowrap;*/
  /*本页面样式*/
</style>
<body style="width: 100vw;max-height: 100vh;overflow: auto;background-color: #f8f8f8">
<!--class="maxTitle-white"-->
<div id="app" style="position: relative;width: 100vw;" v-cloak>
//可以通过this.$refs.remark.getData(value)来操作子组件参数或方法
  <remark ref="remark"></remark>
</div>
</body>
<script>
  let app = new Vue({
    el:'#app',
    /* 引入vue文件作为测 组件  */
    components: {
      'Remark': httpVueLoader('components/remark.vue')
    },
    // 传递给子组件孙组件的属性,第一个是参数,后面三个是方法,都是一样的传递方式。
     provide(){
        return{
            topsrcoll: this.topsrcoll,
            goThumbnailVideo: this.goThumbnailVideo,
            goThumbnail: this.goThumbnail,
            setTop: this.setTop,
        }
     },
    //数据
    data(){
      let u = navigator.userAgent;
      return {
        isWx: window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger',
        isAndroid: u.indexOf("Android") > -1 || u.indexOf("Adr") > -1,
        isiOS: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
        title: "",
      }
    },
    //方法
    methods:{
      // 修改评论子组件的文章id
      // app.$children.forEach((item,index)=>{
      //   if(item.components!=="remark")
      //     return true;
      //     item.id = 123456
      // });
    },
    //初始化
    moun
<think>好的,我现在需要帮助用户在Vue项目中通过CDN方式引入ECharts库,并在Vue文件使用它来实现图表功能。首先,我得回想一下用户提供的引用内容,看看里面有没有相关的信息。 根据引用[1]和引用[5],用户提到可以通过CDN或npm安装ECharts,并且在main.js中进行挂载。特别是引用[5]详细说明了在App.vue引入组件并注册的步骤,虽然这是针对引入本地组件的情况,但CDN的方式可能需要不同的处理。引用[1]中的示例代码展示了在main.js中通过import语句引入ECharts,但用户想用CDN,所以可能需要调整这部分。 首先,用户需要在HTML文件中通过script标签引入ECharts的CDN链接,而不是使用npm安装。这通常在public/index.html中添加。接着,在Vue的main.js中,可能需要将ECharts挂载到Vue的原型上,这样各个组件就可以通过this.$echarts来访问。不过,使用CDN的话,ECharts可能会被挂载到全局变量window.echarts,所以可能需要调整引入方式。 接下来,在具体的Vue组件中,用户需要在mounted生命周期钩子中初始化图表。引用[2]和引用[4]提到在mounted中使用echarts.init来初始化图表实例,其中引用[4]还用了Vue3的markRaw来处理响应式问题。这里需要注意,如果用户用的是Vue3,可能需要使用ref和markRaw,而Vue2的话可能不需要。 另外,引用[1]中提到高版本ECharts需要使用import * as echarts from 'echarts',但通过CDN引入的话,可能不需要import,而是直接使用全局变量。比如,在CDN引入后,ECharts可能存在于window.echarts,所以在组件中可以直接使用echarts.init,而不需要import语句。不过用户可能需要在main.js中将全局的echarts挂载到Vue原型上,方便组件访问,类似于引用[1]中的做法,但需要调整导入方式。 步骤大概是这样的: 1. 在index.html中添加CDN脚本标签。 2. 在main.js中挂载ECharts到Vue原型,使用window.echarts。 3.组件中通过this.$echarts访问,并在mounted生命周期中初始化图表。 需要注意的是,CDN引入可能会导致ECharts的按需加载困难,所以如果用户需要特定的组件或模块,可能需要额外引入对应的CDN文件。此外,版本兼容性也是一个问题,需要确保CDN的版本与Vue项目兼容。 可能的问题点:用户可能在组件中直接使用import语句,而CDN方式不应该使用import,这会导致冲突。需要确保组件中不出现import echarts的语句,而是通过全局变量或Vue原型来访问。 总结一下,步骤应该是: - 引入CDNHTML。 - 配置Vue原型以使用全局ECharts。 - 在组件中初始化图表实例。 然后,根据这些步骤,编写具体的代码示例,并注意Vue2Vue3的差异,比如在Vue3中使用setup函数或composition API时的处理方式,可能需要使用markRaw来避免响应式问题,如引用[4]所示。</think>### 分步指南:通过CDNVue项目中引入使用ECharts #### 1.HTML引入CDN链接 在`public/index.html`的`<head>`或`<body>`末尾添加ECharts CDN脚本: ```html <!-- 示例使用官方5.x版本CDN --> <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.2/dist/echarts.min.js"></script> ``` #### 2.Vue全局配置中挂载ECharts(以Vue2为例) 在`main.js`中将ECharts绑定到Vue原型: ```javascript // Vue2写法 import Vue from 'vue' Vue.prototype.$echarts = window.echarts; // 通过CDN全局变量挂载 ``` #### 3.Vue组件使用图表 在组件模板中定义图表容器: ```html <template> <div id="myChart" style="width: 600px; height: 400px;"></div> </template> ``` 在脚本中初始化图表: ```javascript export default { mounted() { // 通过this.$echarts访问 const myChart = this.$echarts.init(document.getElementById('myChart')); myChart.setOption({ xAxis: { type: 'category', data: ['A', 'B', 'C'] }, yAxis: { type: 'value' }, series: [{ data: [10, 20, 30], type: 'bar' }] }); } } ``` #### 4. 针对Vue3的调整(使用Composition API) 若使用Vue3,需在`main.js`中通过`app.config.globalProperties`挂载: ```javascript // Vue3写法 import { createApp } from 'vue'; const app = createApp(App); app.config.globalProperties.$echarts = window.echarts; ``` 组件使用`markRaw`避免响应式问题: ```javascript import { onMounted, markRaw } from 'vue'; export default { setup() { onMounted(() => { const chartDom = document.getElementById('myChart'); const myChart = markRaw(echarts.init(chartDom)); // 使用markRaw myChart.setOption({ /* 配置项 */ }); }); } } ``` ### 注意事项 - **版本兼容性**:CDN版本需与代码语法匹配(例如v5.x支持按需加载模块)。 - **按需加载**:若需地图、3D图表等模块,需额外引入对应CDN文件: ```html <script src="https://cdn.jsdelivr.net/npm/echarts-gl@2.0.9/dist/echarts-gl.min.js"></script> ``` - **错误排查**:若出现`init undefined`,检查CDN是否加载成功或版本是否过高[^1][^2]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值