vue 版本:3.3

背景:我项目里面希望给第三方提供一个页面。第三方通过网络接口的方式返回 html 代码,我程序里面把别人的 html 代码嵌入到我的页面中。

目前想到的方案:

1 、使用 v-html 标签嵌入。问题:这种方式嵌入,对方页面中如何调用我 vue 页面的方法属性呢?比如我这里有一个$http 变量是 axios 的实例,这个里面封装的验签相关处理,他必须用我这个$http 属性才能正常调用接口,不然他过不去验签。

2 、使用 vue 的异步组件。目前还没研究明白怎么用

下面是 demo 代码

```
<template>
    <div id="main">
        <el-tabs type="border-card">
        <el-tab-pane v-for="(html,name) in pluginList"  :label="name">
            // 方案 1
            <div v-html="html">

            </div>
            
            // 方案 2
            
            <AsyncComp /> // 这样写的话第二个 plugin 又叫啥名字呢?
            
        </el-tab-pane>
    </el-tabs>
    </div>
</template>

<script setup>
import { reactive, ref, getCurrentInstance } from 'vue'
const app = getCurrentInstance()
const $http = app.appContext.config.globalProperties.$http
import { defineAsyncComponent } from 'vue'


const pluginList = reactive({})

$http.get('/api/plugin/list').then(res => {
    if (res.data != null && res.data.length > 0  ) {
        pluginList[res.data] = ""
        getPlugHtml(res.data)
    }
})



const getPlugHtml = function(name){

         // 方案 1
         $http.post('/api/plugin/settings/'+name+"/index").then(res => {
                if (res.data != null && res.data!=""  ) {
                    pluginList[name] = res.data
                }else{
                    pluginList[name] = "Load Error!"
                }
            })



        // 方案 2. 但是 AsyncComp 这个名字怎么处理呢?这里换成变量以后,我模板里面的代码该怎么调用异步组件呢?
    const AsyncComp = defineAsyncComponent(() => {
        return new Promise((resolve, reject) => {
            $http.post('/api/plugin/settings/'+name+"/index").then(res => {
                if (res.data != null && res.data!=""  ) {
                    resolve(res.data)
                }else{
                    reject("Plugin Load Error!")
                }
            })
            
        })
    })



}


</script>

```
举报· 393 次点击
登录 注册 站外分享
21 条回复  
saberlove 小成 2024-7-23 15:16:43
您是否在寻找 QianKun?
tog 小成 2024-7-23 15:22:26
为什么不用 iframe ?
发方案 1 按道理可行。
weixind 小成 2024-7-23 15:39:53
需要定义个 bridge 。和 VUE 关系不大。
bojackhorseman 小成 2024-7-23 15:53:02
听着有点像微前端的范畴。可以试试 micro-app ,接入很简单,就是主应用和子应用要按照框架约定好一些东西。
horizon 初学 2024-7-23 15:57:37
全部暴露到 window 上啊。。
daysv 小成 2024-7-23 16:03:54
搞那么麻烦, 全挂全局
lisia 小成 2024-7-23 16:04:43
把$http 写入到 window 对象中。
第三方 HTML 里面就可用在 HTML 里面插入 script 来获取了吧,不过这种安全风险有点大。
murmur 小成 2024-7-23 16:12:33
这东西我在某个大型 OA 上见过,可以用 react 代码直接把内置组件换掉,还自带 babel
op351 小成 2024-7-23 16:23:49
@murmur 泛微的 ecode 吗?
123下一页
返回顶部