乾坤-vue应用实例

1.前期准备工作

1.1 创建主应用

  1) vue 新建主应用

vue create qiankun-main

  2) 创建src/components/father.vue

<template><div>我是father</div>
</template><script>
export default {name: 'Father'
}
</script>
<style scoped></style>

  3) src/router/index.js中添加路由信息

import Vue from 'vue'
import VueRouter from 'vue-router'Vue.use(VueRouter)const routes = [{path: '/',redirect: '/father'},{path: '/father',name: 'Father',component: () => import(/* webpackChunkName: "about" */ '@/components/Father')}]const router = new VueRouter({mode: 'history',routes
})export default router

  4) 在main.js中引入路由

new Vue({router,render: h => h(App)
}).$mount('#base-app')

  app.vue和index.html 里面根id也要是base-app
  1. app.vue

<template><div class="app" id="base-app"></div>
</template>

  2. index.html

  <div id="base-app"></div>

  5) 在项目根目录下新建vue.config.js,添加内容如下

module.exports = {devServer: {port: 8085,headers: {'Access-Control-Allow-Origin': '*' // 重点1: 允许跨域访问子应用页面}}
}

  6) 修改app.vue中的内容,如下:

<template><div class="app" id="base-app"><span><router-link to="/">点击跳转到父页面</router-link></span><span><router-link to="/vue">点击跳转到子页面</router-link></span><router-view /><div id="vue"></div><!-- 重点2:子应用容器 id --></div>
</template>

  7) 测试:运行程序后,浏览器打开本地http://localhost:8085/father,能成功显示father.vue页面的内容。结果如下:

1.2 创建子应用

  1) 新建子应用

vue create qiankun-vue-child

  2) 创建src/components/child.vue,内容如下:

<template><div >我是子页面</div>
</template><script>
export default {name: 'Child',props: {msg: String}
}
</script>
<style scoped></style>

  3) src/router/index.js中添加路由信息,内容如下:

import Vue from 'vue'
import VueRouter from 'vue-router'
import '../public-path'
Vue.use(VueRouter)const routes = [{ path: '/', redirect: '/child' },{ path: '/child', component: () => import('../components/Child') }
]const router = new VueRouter({// 有些时候我们希望直接启动微应用从而更方便的开发调试,你可以使用这个全局变量来区分当前是否运行在 qiankun 的主应用的上下文中base: window.__POWERED_BY_QIANKUN__ ? '/vue' : '/', // 重点4mode: 'history', // 重点5routes
})export default router

  4)在main.js中引入路由,内容如下:

import router from "./router"
Vue.use(Router)
new Vue({router,render: h => h(App),
}).$mount('#app')

  5)在项目根目录下新建vue.config.js,添加内容如下:

const { name } = require('./package')
module.exports = {devServer: {port: 8083, // 重点6headers: { // 重点7:同重点1,允许子应用跨域'Access-Control-Allow-Origin': '*'}},// 自定义webpack配置configureWebpack: {output: {library: `${name}-[name]`,libraryTarget: 'umd', // 把子应用打包成 umd 库格式jsonpFunction: `webpackJsonp_${name}`}}
}

  6)修改app.vue中的内容,如下:

<template><div class="app">我是子应用<router-view/></div>
</template>

  7)测试:运行程序后,浏览器打开本地http://localhost:8083/child,能成功显示child.vue页面的内容。结果如下:

2.乾坤简单配置步骤

2.1 主应用配置

  1) 安装乾坤

$ yarn add qiankun # 或者 npm i qiankun -S

  2) 在主应用入口文件src/main.js中注册子应用

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import { registerMicroApps, start } from 'qiankun'
Vue.config.productionTip = falsenew Vue({router,render: h => h(App)
}).$mount('#base-app')// 在主应用中注册子应用
registerMicroApps([{name: 'vue app',entry: '//localhost:8083', // 重点8:对应重点6container: '#vue', // 重点9:对应重点2activeRule: '/vue', // 重点10:对应重点4props: {data: 'child子应用'}
}]
)
// 启动
start()

  3) 主应用可以给子应用传值。

  通过props传递

registerMicroApps([{name: 'vue app',entry: '//localhost:8083', // 重点8:对应重点6container: '#vue', // 重点9:对应重点2activeRule: '/vue', // 重点10:对应重点4props: {data: 'child子应用'}
}]

  子应用可以在生命周期函数通过props接收数据

export async function bootstrap (props) {console.log('data bootstrap', props)
}
export async function mount (props) {console.log('乾坤子应用容器加载完成,开始渲染 child')console.log('props from main mount', props)render(props)
}
2.2 子应用配置

  1) 在src目录新增public-path.js,内容如下:

if (window.__POWERED_BY_QIANKUN__) {__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__
}

  2) 在main.js中配置如下:

import Vue from 'vue'
import App from './App.vue'
import router from './router'Vue.config.productionTip = falselet instance = null
function render (props = {}) {const { container } = propsinstance = new Vue({router,render: h => h(App)}).$mount(container ? container.querySelector('#app') : '#app') // 为了避免根id#app与其他DOM冲突,需要限制查找范围
}if (!window.__POWERED_BY_QIANKUN__) {render()
}export async function bootstrap (props) {console.log('data bootstrap', props)
}
export async function mount (props) {console.log('乾坤子应用容器加载完成,开始渲染 child')console.log('props from main mount', props)render(props)
}
export async function unmount () {instance.$destroy()instance.$el.innerHTML = ''instance = null
}
说明:子应用的四个周期函数:bootstrap:bootstrap 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,不会再重复触发 bootstrap。通常我们可以在这里做一些全局变量的初始化,比如不会在 unmount 阶段被销毁的应用级别的缓存等。
mount:应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法。
unmount:应用每次 切出/卸载 会调用的方法,通常在这里我们会卸载微应用的应用实例。
update:可选生命周期钩子,仅使用 loadMicroApp 方式加载微应用时生效。

乾坤-vue应用实例相关推荐

  1. 【前端5】vue:实例,插值表达式,v-,组件

    文章目录 1.vue安装:MVVM 2.案例:对象是vm,里面el等是构造参数 3.案例:num是数据即M,前端是V,这样交互简化了jquary(js) 4.vue实例:先绑定 5.vue对象的生命周 ...

  2. Vue之实例的生命周期

    Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁的过程,就是生命周期 ...

  3. Vue开发实例(11)之el-menu实现左侧菜单导航

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  4. Vue开发实例(15)之动态路由

    引言 Vue是现在前端最流行的框架之一,作为前端开发人员应该要熟练的掌握它,如果你是打算学习Vue的开发流程,那么来吧,明哥带你快速上手.带你飞! 即使你并非前端开发人员,对前端的开发流程进行一定的了 ...

  5. 3.vue开发实例演示

    个人博客:http://blog.kunpw.cn/ vue开发实例演示 1.解剖初始化模板 1.1 vue文件 如图所示,对于一个新建的vue文件而言,其中标签分为三个部分: template标签: ...

  6. 2-2.vue的实例属性:data

    2-2.vue的实例属性:data data属性的作用 data属性的作用是存储vue实例或组件里面的数值.在vue的实例中它是以一个对象的方式(多个键值对),在组件中它是一个函数,通过函数返回一个对 ...

  7. Vue开发实例(13)之axios和mockjs的安装与使用

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  8. Vue开发实例(12)之实现动态左侧菜单导航

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  9. Vue开发实例(05)之搭建项目主页面头部、导航、主体等页面布局

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

最新文章

  1. jconsole jvisualvm远程监视websphere服务器JVM的配置案
  2. 【剑指offer】反转链表,C++实现(链表)
  3. 行业场景智能应用,解锁边缘计算时代新机遇
  4. MySql恢复密码的过程
  5. 超声声场模拟_超声全聚焦(TFM)简介
  6. MongoDB和Elasticsearch的各使用场景对比
  7. 转:So Easy!让开发人员更轻松的工具和资源
  8. 武大计算机考研 932教材,2018武汉大学考研官方指定参考书目
  9. 【微信小程序】三分钟学会小程序的列表渲染
  10. 本科计算机软件类毕业论文写作那些事
  11. springboot+mybatis报错处理
  12. linux中引号的作用是什么意思,Linux中的双引号的作用
  13. 软件估算与软件测量的区别是什么?
  14. 汇编 eax test jnz jz 等组合连用的总结
  15. RHCSA/Linux基础
  16. 小米air2se耳机只有一边有声音怎么办_小米真无线蓝牙耳机Air2 SE体验:花小钱也能办大事...
  17. python画三维坐标图像_由RGB-D图像获取三维坐标(相机坐标) Python
  18. 基于C语言实现的足球信息查询系统 课程报告+项目源码+演示PPT+项目截图
  19. String类型转Long类型需要注意的问题
  20. 天津恒安标准人寿面试经验

热门文章

  1. Virtualbox6.1 SATA控制器默认设置导致jbd2低效磁盘访问
  2. java 后端学习路线(简化)
  3. opendaylight-O版本与openstack集成
  4. Asp.net(c#)导出有表格线的Excel
  5. C语言 找出数组中重复数字出现最多的数
  6. 阿里发布的 SpringCloud Alibaba开发文档,涵盖了所有的操作!
  7. Pygame:飞机大战5(详细解读)
  8. 高中毕业:网络安全是一个好的专业吗?
  9. 11203 RAC(asm)恢复一例
  10. php面板安装图解,phpstudy-linux面板(小皮面板) – 安装试用教程