标签:Vue comp js vue dialog import 首屏 加载
依赖
webpack,import()语法
目标
首屏不展示的组件,在用户点击的时候去加载js,比如弹窗。
代码
<template>
<div>
<button @click="openDialog">打开弹窗</button>
<!-- 用于挂载元素的占位 -->
<div id="dialog"></div>
</div>
</template>
<script>
import Vue from 'vue'
export default {
props:{},
data(){
return {
comp: {
dialog: null, // 保存对话框实例
}
}
},
methods: {
openDialog(){
// 下载弹窗js
import('./xxxDialog.vue').then(module => {
if(!comp.dialog){
let Dialog = Vue.extend(module.default);
this.comp.dialog = new Dialog().$mount('#dialog') // 挂载到dom上
}
}).then(() => {
this.comp.dialog.show();//打开对话框的方法
})
}
},
}
</script>
原理
- import() 的代码如果大于多少kb,在webpack中会独立打包出一个js。
- 使用import导入模块时,浏览器会请求该js,可以在then回调中获取js模块。
- 使用Vue.extend 构造器将对象转换为vue子类。Vue.extend官方文档
- new 实例化vue子类,得到vm,使用$mount(id) 挂载到dom上 。vm.$mount() 官方文档
- 保存实例化的vm在data中,防止重复实例化,且可用于访问实例方法。(如show方法)
结果
点击按钮,浏览器会发起请求
标签:Vue,comp,js,vue,dialog,import,首屏,加载 来源: https://blog.csdn.net/qq_35459724/article/details/122081065
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。