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

#14vue3生成表单并跳转到外部地址的方式

1、背景

后端返回的json数据中包含一个json数组,此数组中是目标跳转地址所需要的form表单的数据。

2、跳转前的页面

const goto = () => {finish.value = true;request.post('/xxx/yyy',{zzz: zzz.value}).then(res => {const url = res.data.submitUrlconst params = JSON.stringify(res.data.params);const resolve = router.resolve({name:'outForm',query:{url,params}});window.open(resolve.href, "_blank");})
}

params在后端是一个Map<String,Object>,传递到前端后先将其序列化为字符串。

使用router.resolve通过query上送的方式把参数传递到outForm.vue。

3、outForm.vue

<template>
<form ref="formRef" method="post"><input v-for="(value, key) in params" :key="key" type="hidden" :name="key" :value="value" /></form>
</template>
<script setup>
import {onMounted, ref} from "vue";
import {toReactive, useUrlSearchParams} from "@vueuse/core";
import {lowerCaseJSONObj2UpperCaseUnderlineObj} from "../../utils/common";const formRef=ref();
const urlSearchParams=useUrlSearchParams()
const url = ref(decodeURIComponent(urlSearchParams.url));
const parse = JSON.parse(decodeURIComponent(urlSearchParams.params));
const params = toReactive(lowerCaseJSONObj2UpperCaseUnderlineObj(parse));onMounted(() => {formRef.value.action=url.value;formRef.value.submit();
})
</script>

通过v-for将params遍历为对应的input,注意value在前key在后。

此处注意需将params字符串反序列化之后再转化为一个响应式的对象,其中根据业务需求要将参数改为大写加分隔下划线的形式。

然后通过onMounted在form表单挂载完成后立即提交表单,将内容提交到目标url并实现跳转。

附上参数转化函数:

export const lowerCaseJSONObj2UpperCaseUnderlineObj =
(obj) => {if(typeof obj !== 'object') return;const transformedArray = [];for (const key in obj) {const transformedKey = key.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();const transformedObj = { [transformedKey]: obj[key] };transformedArray.push(transformedObj);}return transformedArray.reduce((acc, obj) => {const key = Object.keys(obj)[0];acc[key] = obj[key];return acc;}, {});
}

如果对你有帮助,点赞、收藏、关注是我更新的动力!

#13Maven打包生成MD5校验文件的两种方式_mvn 打war包,显示md5和大小-CSDN博客文章浏览阅读1.9k次,点赞57次,收藏13次。Maven打包生成MD5校验文件的两种方式_mvn 打war包,显示md5和大小https://blog.csdn.net/weixin_42718399/article/details/136375811?spm=1001.2014.3001.5502#12解决request中getReader()和getInputStream()只能调用一次的问题-CSDN博客文章浏览阅读2.1k次,点赞64次,收藏30次。getInputStream() has already been called for this request,解决request中getReader()和getInputStream()只能调用一次的问题https://blog.csdn.net/weixin_42718399/article/details/136237084?spm=1001.2014.3001.5502#11vue3中使用el-dialog展示与关闭交由父组件控制的写法_vue dailog 固定关闭按钮-CSDN博客文章浏览阅读1.1k次,点赞40次,收藏28次。vue3中使用elementplus的el-dialog展示与关闭交由父组件控制的写法,分两种方法,使用difineExpose或者defineEmits实现_vue dailog 固定关闭按钮https://blog.csdn.net/weixin_42718399/article/details/136155379?spm=1001.2014.3001.5502#3Jenkins(Windows环境)版本升级、迁移、负载均衡、双机器同步与备份_windows下的jenkins的job备份-CSDN博客文章浏览阅读1.1k次,点赞28次,收藏17次。Jenkins(Windows环境)版本升级、迁移、负载均衡、双机器同步与备份_windows下的jenkins的job备份https://blog.csdn.net/weixin_42718399/article/details/135404525?spm=1001.2014.3001.5502#2Vite+Vue3+SpringMVC前后端分离 解决跨域问题和session每次请求不一致问题_vue3 每次请求sessionid都不一样-CSDN博客文章浏览阅读1.1k次,点赞37次,收藏16次。Vite+Vue3+SpringMVC前后端分离通过vite/nginx解决跨域问题和session一致性问题_vue3 每次请求sessionid都不一样https://blog.csdn.net/weixin_42718399/article/details/135388463?spm=1001.2014.3001.5502

相关文章:

  • 数据结构从入门到精通——链表
  • centos7 python3.12.1 报错 No module named _ssl
  • 【2024.03.05】定时执行专家 V7.1 发布 - TimingExecutor V7.1 Release
  • UE4 Niagara 关卡3.4官方案例解析
  • 活动预告|听云猿生数据创始人 CEO 曹伟分享云数据库行业十余年经验总结
  • 这个超火的黑客小工具,可以通过WiFi解锁特斯拉
  • 测试用例编写详解
  • 大语言模型LLM学习梳理
  • 【Docker】Windows11操作系统下安装、使用Docker保姆级教程
  • 间隔5分钟执行1次Python脚本设置步骤 —— 定时执行专家
  • 下载无水印抖音视频
  • k倍区间c++
  • spm用于颅骨去除和配准
  • 电脑的“32位”和“64位”是什么?
  • python爬虫(2)
  • 30天自制操作系统-2
  • 4. 路由到控制器 - Laravel从零开始教程
  • CSS 专业技巧
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • happypack两次报错的问题
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript类型识别
  • Java小白进阶笔记(3)-初级面向对象
  • PermissionScope Swift4 兼容问题
  • Python进阶细节
  • Vue2.0 实现互斥
  • zookeeper系列(七)实战分布式命名服务
  • 关于List、List?、ListObject的区别
  • 前端
  • 使用docker-compose进行多节点部署
  • 我的zsh配置, 2019最新方案
  • 移动端 h5开发相关内容总结(三)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define 用法
  • #QT(串口助手-界面)
  • #vue3 实现前端下载excel文件模板功能
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (C++17) std算法之执行策略 execution
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)Oracle存储过程编写经验和优化措施
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET CLR基本术语
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net MySql
  • .NET/C# 使窗口永不获得焦点