无界,wujie的使用

vue2 使用wujie的具体步骤

主应用使用了vue2+webpack,子应用使用了vue2+webpack。

  1. 安装 

# vue2 框架
npm i wujie-vue2 -S
# vue3 框架
npm i wujie-vue3 -S

2,引入 在main.js中引入

1,在src下创建hostMap.js

// 这里就不写公司的应用域名了,用百度做例子,到时候把自己子应用的域名写上就行了
const map = {
  // 子应用的测试环境
  'http://localhost:1025': 'http://localhost:1025',//dev-baidu.baidu.cn/',
  // 子应用的预发环境
  'http://localhost:1025': 'http://localhost:1025',
  // 子应用的生产环境
  'http://localhost:1025': 'http://localhost:1025',
}

export default function hostMap (host) {
  if (process.env.NODE_ENV === 'production') return map[host]
  return host
}

2,在src目录下创建constants->sub-app.js文件

// 子应该环境域名
export const ENV_DOMAIN_MT_MAP = {
  development: 'http://localhost:1025', // 开发/测试环境 例如:dev.baidu.com
  staging: 'http://localhost:1025', // 预发环境 例如:staging.baidu.com
  production: 'http://localhost:1025' // 生产环境 例如:baidu.com
}

3,在main.js中引入


// 这里是有多个子应用的时候,可以把子应用的地址配置放在一个文件,导入进来就行了
import {  ENV_DOMAIN_MT_MAP } from '@/constants/sub-app.js'
// 这个文件主要是配置一些子应用的测试环境地址
import hostMap from './hostMap.js'
// 微服务
import WujieVue from "wujie-vue2";
const { setupApp, preloadApp } = WujieVue // 使用到无界API
Vue.use(WujieVue);
// 创建应用,主要是设置配置,preloadApp、startApp的配置基于这个配置做覆盖
setupApp({
    name: '大数据平台', // 这里这个名称要和展示子应用页面设置的名称一样哦!!!!
    url: hostMap(ENV_DOMAIN_MT_MAP[process.env.NODE_ENV]), // 子应用的域名链接
})
preloadApp({
    name: '大数据平台', // 这里这个名称要和展示子应用页面设置的名称一样哦!!!!
    url: hostMap(ENV_DOMAIN_MT_MAP[process.env.NODE_ENV]), // 子应用的域名链接
})

3,主应用使用

<template>
    <!-- <div class="past_class">
        <WujieVue name="micro" url="http://localhost:1025/data/" />
    </div> -->
    <div>
        <div class="container">
            <h1>父界面</h1>
            <el-input
                placeholder="请输入内容"
                v-model="value"
                class="input-with-select"
            >
                <el-button slot="append" @click="emitInput" icon="el-icon-search"></el-button>
            </el-input>
        </div>
        <div class="container">
            <h1>嵌套界面</h1>
            <!-- //组件穿透传值 data值  method方法propsMethod -->
            <WujieVue width="100%" height="100%" name="micro" :props="{data:'propsdata',method:{propsMethod}}"  :url="mtUrl" />
        </div>
    </div>
</template>
<script>
import hostMap from '@/hostMap'
import wujieVue from "wujie-vue2";
import { ENV_DOMAIN_MT_MAP } from '@/constants/sub-app.js'
window.globalMainValue = '我是主应用全局变量'
export default {
    data() {
        return {
            value: '',
            mtUrl: '',// 链接
            top: "连接已失效",
            bottom: "请重新获取有效链接"
        };
    },
    methods: {
        emitInput(e) {
            console.log(e, 112312312312);
        },
        propsMethod(e){
            console.log(1111111, window.document.querySelector("iframe[name=micro]").contentWindow.globalMicroValue)
        },
    },
    mounted() {
        wujieVue.bus.$on('microEmit', (val) => {
            this.value = val
        })
        this.mtUrl = `${hostMap(ENV_DOMAIN_MT_MAP[process.env.NODE_ENV])}/data/`
        console.log(this.mtUrl)
    },
};
</script>
<style lang="scss" scoped></style>

4,子应用使用如下

<template>
  <div class="app-container home">
    <!-- <div class="logii-bc">
      <el-image
        :src="require('@/assets/logo/logo-bc.png')"
        fit="cover">
      </el-image>
    </div> -->
    <div class="container">
      <h1>{{ data === "" ? "hi" : data }}</h1>
      <el-button @click="doPropsData">获取父应用通过props传递的值</el-button>
      <el-button @click="doPropsMethod"
        >执行父应用通过props传递的方法</el-button
      >
      <el-button @click="microEmit">向父应用传值</el-button>
    </div>
  </div>
</template>

<script>
export default {
  name: "Index",
  data() {
    return {
      // 版本号
      version: "3.6.1",
    };
  },
  mounted() {
    window.$wujie.bus.$on("input", (val) => (this.data = val));
    window.globalMicroValue = "我是子应用全局变量";
    console.log(2222222, window.parent.globalMainValue);
  },
  methods: {
    goTarget(href) {
      window.open(href, "_blank");
    },
    doPropsMethod() {
      window.$wujie.props.method.propsMethod();
    },
    doPropsData() {
      this.data = window.$wujie.props.data;
      console.log(this.data )
    },
    microEmit() {
      window.$wujie.bus.$emit("microEmit", "micro data");
    },
  },
};
</script>

如果子应用跨域需要在vue.config.js中引headers: {"Access-Control-Allow-Origin": "*" // 开启应用间的跨域访问},

  devServer: {
    host: '0.0.0.0',
    port: port,
    open: true,
    proxy: {
      [process.env.VUE_APP_BASE_API]: {
        target:xxxxx //本地
        changeOrigin: true,
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_API]: ''
        }
      }
    },
    headers: {
      "Access-Control-Allow-Origin": "*" // 开启应用间的跨域访问
    },
    disableHostCheck: true
  },
### 关于 wujie-vue3 的使用方法 #### 导入与注册插件 为了在 Vue 3 应用中利用 `wujie-vue3` 实现微前端架构,需先导入并注册该插件。具体操作如下所示: ```javascript import { createApp } from 'vue'; import App from './App.vue'; import WujieVue from 'wujie-vue3'; const app = createApp(App); app.use(WujieVue); app.mount('#app'); ``` 此段代码展示了如何创建一个基于 Vue 3 的应用程序实例,并通过调用 `.use()` 方法来安装 `wujie-vue3` 插件[^1]。 #### 配置子应用参数 当希望在一个父级 Vue 组件内嵌套展示其他独立部署的小程序时,则可以在模板文件里声明 `<WujieVue>` 自定义标签来进行配置。下面是一个简单的例子: ```html <template> <div id="container"> <!-- 子应用容器 --> <WujieVue :name="'subAppName'" :url="'/path/to/sub-app'" /> </div> </template> <script lang="ts" setup> // 这里的 script 可能会涉及到 TypeScript 或者普通的 JavaScript 文件, // 根据实际项目的设置而定。 </script> ``` 上述 HTML 片段中的属性解释: - `name`: 设置子应用的名字以便识别; - `url`: 指向子应用的实际路径地址; 这些选项允许开发者轻松地将不同源码库构建出来的多个单页应用无缝拼接到同一个页面上工作。 #### 处理生命周期钩子函数 除了基本的加载外,还可以监听来自子应用的各种事件以及执行相应的回调逻辑。比如可以添加一些额外的方法去控制何时预载入资源、销毁实例等行为。这可以通过传递特定 prop 来完成,如 `beforeLoad`, `afterMount` 等等[^4]。 ```html <WujieVue name="example" url="/example/" :sync="true" @before-load="handleBeforeLoad" /> ``` 这里展示了如何绑定自定义处理函数到组件上的某些阶段触发点上去,从而更好地管理和协调各个模块之间的交互过程。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值