当前位置: 首页 > 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)
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • ES6 ...操作符
  • Java精华积累:初学者都应该搞懂的问题
  • JS+CSS实现数字滚动
  • JS数组方法汇总
  • Just for fun——迅速写完快速排序
  • LeetCode算法系列_0891_子序列宽度之和
  • mysql中InnoDB引擎中页的概念
  • Swoft 源码剖析 - 代码自动更新机制
  • tab.js分享及浏览器兼容性问题汇总
  • XForms - 更强大的Form
  • 动态魔术使用DBMS_SQL
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 区块链将重新定义世界
  • 跳前端坑前,先看看这个!!
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 正则表达式
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (175)FPGA门控时钟技术
  • (2)MFC+openGL单文档框架glFrame
  • (C#)一个最简单的链表类
  • (Java)【深基9.例1】选举学生会
  • (定时器/计数器)中断系统(详解与使用)
  • (九)信息融合方式简介
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)Linux下编译安装log4cxx
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 反射 Reflect
  • .NET 药厂业务系统 CPU爆高分析
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • ::before和::after 常见的用法
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [2010-8-30]
  • [51nod1610]路径计数
  • [C puzzle book] types
  • [C/C++]关于C++11中的std::move和std::forward