美文网首页
QianKun2.0.11版本在Vue中的使用

QianKun2.0.11版本在Vue中的使用

作者: 叶小七的真命天子 | 来源:发表于2020-05-14 16:41 被阅读0次

    最近闲暇无事研究下qiankun,发现最新的版本的接口与官网的文档不一致,估计文档还没梳理,故此在此记录下。主要更改的是注册时加入了container字段、loader函数。

    • container 微应用的容器
    • loader 加载函数(可不传),参数为loading和appContext,(实际中发现appContext始终为undefined),可以控制显示loading

    具体使用详情见官方仓库的example

    主项目是有VueCLI生成的普通的vue项目

    主项目

    1、安装qiankun

    yarn add qiankun
    

    2、编写qiankun.js逻辑,注册微应用
    (由于主项目使用的是默认的hash模式路由,故activeRule改为location.hash.startsWith(routerPrefix))

    import { registerMicroApps, start, setDefaultMountApp } from 'qiankun'
    
    function genActiveRule (routerPrefix) {
      return location => location.hash.startsWith(routerPrefix)
    }
    
    export default function run () {
      registerMicroApps([
        {
          name: 'react16',
          entry: '//localhost:7100',
          container: '#subapp-viewport',
          loader: () => {},
          activeRule: genActiveRule('#/react16')
        },
        {
          name: 'react15',
          entry: '//localhost:7102',
          container: '#subapp-viewport',
          loader: () => {},
          activeRule: genActiveRule('#/react15')
        }
      ])
      setDefaultMountApp('/react16')
    
      start()
    }
    
    

    注意由于我们配置的container为#subapp-viewport,故需要在构建路由时,在路由的componet中的template写入id为subapp-viewport的div

    router.js

    import Vue from 'vue'
    import VueRouter from 'vue-router'
    import Home from '../views/Home.vue'
    
    Vue.use(VueRouter)
    
      const routes = [
      {
        path: '/react16',
        name: 'Home',
        component: Home
      },
      {
        path: '/react15',
        name: 'About',
        // route level code-splitting
        // this generates a separate chunk (about.[hash].js) for this route
        // which is lazy-loaded when the route is visited.
        component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
      }
    ]
    
    const router = new VueRouter({
      routes
    })
    
    export default router
    
    

    Home.vue中模板加入指定的dom元素

    <template>
      <div id="subapp-viewport">
      
      </div>
    </template>
    
    <script>
    // @ is an alias to /src
    import HelloWorld from '@/components/HelloWorld.vue'
    
    export default {
      name: 'Home',
      components: {
        HelloWorld
      }
    }
    </script>
    
    

    main.js中引入qiankun.js

    import Vue from 'vue'
    import App from './App.vue'
    import router from './router'
    import store from './store'
    
    import runApp from './qiankun'
    
    Vue.config.productionTip = false
    
    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app')
    
    runApp()
    
    

    子应用

    子应用自己随便新建项目然后按照文档,导出生命周期钩子,加入publicPath即可,不然会导致404。

    搞定~

    相关文章

      网友评论

          本文标题:QianKun2.0.11版本在Vue中的使用

          本文链接:https://www.haomeiwen.com/subject/giotohtx.html