微前端qiankun主应用与子应用之间的跳转示例

 更新时间:2023年08月21日 11:37:50   作者:黑萝卜不黑  
这篇文章主要为大家介绍了微前端qiankun主应用与子应用之间的跳转示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

具体需求

一个后台管理系统,子应用中的token时效后,接口请求报错,这时候需要跳转到主应用中的登录页面。

传递一个登录方法

在主应用调用子应用

传递一个登录方法,在有需要的地方调用该方法。

import { registerMicroApps, start } from 'qiankun';
import router from '@/router'
const apps = [
  {
    name: 'sonApp',
    entry: '//localhost:8080',
    container: '#container',
    activeRule: '/son-app',
  }
]
registerMicroApps(apps,{
  // qiankun 生命周期钩子 - 加载前
  beforeLoad: (app) => {
    console.log('加载子应用前,加载进度条=', app.name)
    const data = {
      token: 'admin',
    }
    app.props.data = data
    // 退出方法
     app.props.reRegister = () => {
      store.dispatch('LogOut').then(() => {
        sessionStorage.removeItem('tabViews')
        location.reload()
        console.log('重新登录~')
      })
    }
    return Promise.resolve()
  },
  // qiankun 生命周期钩子 - 挂载后
  afterMount: (app) => {
    console.log('加载子应用前,进度条加载完成', app.name)
    return Promise.resolve()
  }
} );
// 启动 qiankun
start();

子应用接收主应用传递的参数和方法

并在有需要的地方使用Vue.prototype.$baseReRegister()

import './public-path';
import Vue from 'vue';
import VueRouter from 'vue-router';
import App from './App.vue';
import routes from './router';
import store from './store';
Vue.config.productionTip = false;
let router = null;
let instance = null;
function render(props = {}) {
  const { container, mainRouter  } = props;
  router = new VueRouter({
    base: window.__POWERED_BY_QIANKUN__ ? '/app-vue/' : '/',
    mode: 'history',
    routes,
  });
  instance = new Vue({
    router,
    store,
    render: (h) => h(App),
  }).$mount(container ? container.querySelector('#app') : '#app');
// 将主应用的函数挂到原生上方便调用
  Vue.prototype.$baseReRegister = reRegister
}
// 独立运行时
if (!window.__POWERED_BY_QIANKUN__) {
  render();
}
export async function bootstrap() {
  console.log('[vue] vue app bootstraped');
}
export async function mount(props) {
  console.log('[vue] props from main framework', props);
  render(props);
}
export async function unmount() {
  instance.$destroy();
  instance.$el.innerHTML = '';
  instance = null;
  router = null;
}

通过history.pushState()方式进行跳转

 window.history.pushState({
       user: {}
     }, '', '/login')}

主应用开启qiankun并向子应用传递数据

将主应用的路由在吊起子应用时传递过去,使用主应用的路由完成跳转。但是尝试未能成功,有采用这条思路做对的小伙伴可以给个建议。

主应用开启qiankun并向子应用传递数据

import { registerMicroApps, start } from 'qiankun';
import router from '@/router'
const apps = [
  {
    name: 'sonApp',
    entry: '//localhost:8080',
    container: '#container',
    activeRule: '/son-app',
  }
]
registerMicroApps(apps,{
  // qiankun 生命周期钩子 - 加载前
  beforeLoad: (app) => {
    console.log('加载子应用前,加载进度条=', app.name)
    const data = {
      token: 'admin',
    }
    app.props.data = data
    // 向子应用传递路由
    app.props.mainRouter = router
    return Promise.resolve()
  },
  // qiankun 生命周期钩子 - 挂载后
  afterMount: (app) => {
    console.log('加载子应用前,进度条加载完成', app.name)
    return Promise.resolve()
  }
} );
// 启动 qiankun
start();

子应用接收数据,在需要更改到主路由的地方使用Vue.prototype.parentRouter

import './public-path';
import Vue from 'vue';
import VueRouter from 'vue-router';
import App from './App.vue';
import routes from './router';
import store from './store';
Vue.config.productionTip = false;
let router = null;
let instance = null;
function render(props = {}) {
  const { container, mainRouter  } = props;
  router = new VueRouter({
    base: window.__POWERED_BY_QIANKUN__ ? '/app-vue/' : '/',
    mode: 'history',
    routes,
  });
  instance = new Vue({
    router,
    store,
    render: (h) => h(App),
  }).$mount(container ? container.querySelector('#app') : '#app');
// 将主应用的函数挂到原生上方便调用
 Vue.prototype.parentRouter = mainRouter
}
// 独立运行时
if (!window.__POWERED_BY_QIANKUN__) {
  render();
}
export async function bootstrap() {
  console.log('[vue] vue app bootstraped');
}
export async function mount(props) {
  console.log('[vue] props from main framework', props);
  render(props);
}
export async function unmount() {
  instance.$destroy();
  instance.$el.innerHTML = '';
  instance = null;
  router = null;
}

以上就是微前端qiankun主应用与子应用之间的跳转示例的详细内容,更多关于qiankun主应用子应用跳转的资料请关注脚本之家其它相关文章!

相关文章

  • vue点击右键出现自定义操作菜单实现代码

    vue点击右键出现自定义操作菜单实现代码

    这篇文章主要给大家介绍了关于vue点击右键出现自定义操作菜单实现的相关资料,在网页中我们也希望可以像桌面软件一样,点击右键后出现操作菜单,对选中的数据项进行相应的操作,需要的朋友可以参考下
    2023-08-08
  • vue简单封装axios插件和接口的统一管理操作示例

    vue简单封装axios插件和接口的统一管理操作示例

    这篇文章主要介绍了vue简单封装axios插件和接口的统一管理操作,结合具体实例形式分析了vue中axios插件安装、配置及接口统一管理具体操作技巧,需要的朋友可以参考下
    2020-02-02
  • echarts 使用formatter 修改鼠标悬浮事件信息操作

    echarts 使用formatter 修改鼠标悬浮事件信息操作

    这篇文章主要介绍了echarts 使用formatter 修改鼠标悬浮事件信息操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue强制刷新组件的方法示例

    vue强制刷新组件的方法示例

    这篇文章主要介绍了vue强制刷新组件的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • Vue+Element树形表格实现拖拽排序示例

    Vue+Element树形表格实现拖拽排序示例

    本文主要介绍了Vue+Element树形表格实现拖拽排序示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • vue 实现拖拽动态生成组件的需求

    vue 实现拖拽动态生成组件的需求

    这篇文章主要介绍了vue 如何实现拖拽动态生成组件的需求,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下
    2021-05-05
  • Element Plus在el-form-item中设置justify-content无效的解决方案

    Element Plus在el-form-item中设置justify-content无效的解决方案

    这篇文章主要介绍了Element Plus在el-form-item中设置justify-content无效的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue 3.0 使用ref获取dom元素的示例

    vue 3.0 使用ref获取dom元素的示例

    这篇文章主要介绍了vue 3.0 使用ref获取dom元素,包括vue2.x获取dom和vue3.0获取单个dom,通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • vue3中的watch和watchEffect实例详解

    vue3中的watch和watchEffect实例详解

    watch和watchEffect都是监听器,但在写法和使用上有所区别,下面这篇文章主要给大家介绍了关于vue3中watch和watchEffect的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • Vue.js组件tree实现无限级树形菜单

    Vue.js组件tree实现无限级树形菜单

    这篇文章主要为大家详细介绍了Vue.js组件tree实现无限级树形菜单代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12

最新评论