当前位置: 首页 > article >正文

Vue3中调用外部iframe链接方法

业务场景,点击某个按钮需要跳转到外部iframe的地址,但是需要在本项目内显示。以前项目中写过调用外部链接的功能,是有菜单的,但是这次是按钮,所以不能直接把地址配到菜单里。

实现方法:在本地路由文件里写个路由,meta里的iframe地址设为空字符串,然后在点击按钮的页面通过一个方法,获取以前配置过跳外部iframe的菜单地址(红框里的),并替换路径,然后再把新地址设置到写的路由文件里,再携带参数跳转。

1、 src/router/index.ts,增加路由,@/views/Iframe/index.vue这个组件是写好的解析路径的组件

 {
    path: '/',
    component: LayoutComponent,
    name: 'XXX预览',
    children: [
      {
        path: '/4705778289',
        component: () => import('@/views/Iframe/index.vue'),
        name: '4705778289',
        meta: {
          hidden: true,
          title: 'XXX预览',
          iframe: "",
          id: "4705778289",
          outorin: '1',
        },
      }
    ],
    meta: {
      hidden: true,
    }
  }

2、在routerHelper.ts文件里写一个查找某条路由的方法,以前iframe使用uuid查找,但是这里查找的时候需要加个?,所以改了一下uuid的方法,改成了直接传入一个参数

// 根据name,从多层数组获取路由对象。 
export const getRouteItemByIframeUuidName = (name, ignoreType = true)=>{
  const list = permissionStore.getAllAuthMenu;
  if(!name){ return false; }
  let result
  let hasFound = false
  const fn = function(list, name){
    for(let i=0; i < list.length; i++){
      if(list[i]?.meta?.iframe?.includes?.(name) && !hasFound && (ignoreType ? true : list[i].moduletype === '1')){
        result = list[i]
        hasFound = true
      }else if(list[i].children && list[i].children.length > 0){
        fn(list[i].children, name)
      }
    }
  }
  fn(list, name)
  return result
}

3、在文件里引入方法,使用递归方法 getRouteItemByIframeUuidName('secondnet?')查找包含字符串,找到后台添加的iframe地址,

4、找到后使用replace替换secondnet,替换为secondnetpreview,

5、然后引入router文件,通过循环找到这条路由,更新meta.iframe,然后再携带query跳转

 

 import { getRouteItemByIframeUuidName } from '@/utils/routerHelper'
 import { constantRouterMap } from '@/router' // 写的路由文件里的路由

  <el-tooltip effect="dark" content="XXX按钮" placement="right" popper-class="atooltip">
        <el-button
          type="primary"
          plain
          size="small"
          @click="goSecondnet"
          class="goFirstnet font14 iconfont"
        >
          <i class="iconfont iconjinruerciguanwang"></i>
        </el-button>
      </el-tooltip>


// 调取预览:type:4;ObjectID :编号
      goSecondnet() {
        const cur = getRouteItemByIframeUuidName('secondnet?'); // 通过方法获取以前配置过的地址
        const url = cur.meta.iframe.replace('secondnet', `secondnetpreview`) // 路径替换为现在需要的路径
        
        // 修改在路由文件里刚刚写的路由的iframe
        constantRouterMap.forEach(item => {
          if (item.name == 'XXX预览') {
            if (item.children[0].name == '4705778289') {
              item.children[0].meta.iframe = url;
            }
          }
        });
        // 携带参数跳转
        if (props.selectEle?.type == "communityRange" && props.selectEle?.item) {
          router.push({ 
            path: '/4705778289', 
            query: {
              id: props.selectEle?.item.STATIONID,
              type: '4',
            }
          });
        }
      },


http://www.kler.cn/a/147821.html

相关文章:

  • 重温设计模式--组合模式
  • 【Mac】安装 PaddleOCR
  • 深度学习0-前置知识
  • C++----类与对象(下篇)
  • 接口测试Day-02-安装postman项目推送Gitee仓库
  • 数据库管理系统——数据库设计
  • 6.一维数组——用冒泡法,选择法将5个整数由大到小排序
  • DBeaver连接MySQL提示“Public Key Retrieval is not allowed“问题解决方式
  • UE使用C++通过定时器启用和停用Tick
  • Vue3水印(Watermark)
  • linux防火墙免费版添加UA屏蔽某些垃圾蜘蛛
  • linux 内核线程
  • dpkg、apt、rpm、yum、dnf使用
  • css优化滚动条样式
  • 【Kotlin】类与接口
  • vue3 终端实现 (vue3+xterm+websocket)
  • ubuntu 安装python3.13
  • React自定义 Hook
  • 人工智能-优化算法和深度学习
  • Android Studio导入项目一直显示正在下载Gradle项目
  • 将图像的rgb数据转成DICOM医学图像格式
  • Git介绍和基础命令解析
  • 玩转微服务-技术篇-JSDOC教程
  • nvm安装以及解决踩坑
  • Java后端使用XWPFDocument生成word文档,踩坑
  • 【心得】XXE漏洞利用个人笔记