1、父应用传参给子应用:
①、直接用路由传参,子应用用this.$route.query接收即可。
①、初始化传参:
父应用
const apps = [ { name: 'workFlow', entry: '//localhost:8080', container: '#workFlow', activeRule: '/jh-flow', // 参数 props: { a: 1 } } ]
子应用
export async function mount(props) { // props 接收到的参数 render(props) }
2、子应用传参给父应用
父应用
import { initGlobalState } from 'qiankun'; // 初始化 参数 state,state一定要起名初始化,这里我监听的是closeTab const actions = initGlobalState({ closeTab: '' }); actions.onGlobalStateChange((state, prev) => { // state: 变更后的状态; prev 变更前的状态 console.log('main state change', state, prev); // 将action对象绑到Vue原型上,为了项目中其他地方使用方便 // Vue.prototype.$actions = actions; // this.$actions.setGlobalState({ // mt: value // }); if (state.closeTab !== '') { // vuex里面的modules里面的mutation,已经被全局使用,不想全局可以给命名空间,另外,直接调用mutation不太好,最好使用action,也就是dispatch方式 store.commit('CLOSE_TAG', state.closeTab); } });
子应用
//首先在mount里挂载全局事件,可收,可发 export async function mount(props) { console.log('bizcore mount'); // 设置主应用下发的方法 // Object.keys(props.fn).forEach(method =>{ // Vue.prototype[`$${method}`] = props.fn[method] // }) // 设置通讯 Vue.prototype.$onGlobalStateChange = props.onGlobalStateChange; Vue.prototype.$setGlobalState = props.setGlobalState; render(props); }
子应用使用全局通讯,通知父应用
this.$setGlobalState({ closeTab: tabName });