当前位置: 首页 > 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

http://www.lryc.cn/news/313659.html

相关文章:

  • 航测管家:智能化革新航测作业流程
  • XXE-XML实体注入漏洞
  • 数据结构从入门到精通——栈
  • webhook详解
  • 用 ChatGPT 帮自己修英文简历 — UI/UX 设计师篇
  • 2402. 2-SAT 问题(tarjan,2-SAT模板题)
  • 基于java+springboot+vue实现的宠物健康咨询系统(文末源码+Lw)23-206
  • 品牌如何玩转饥饿营销?媒介盒子分享
  • Vue3:ref和reactive实现响应式数据
  • 二维码门楼牌管理系统应用场景:商业与零售业发展的助推器
  • 【Linux进阶之路】网络 —— “?“ (下)
  • 【AIGC】Stable Diffusion的建模思想、训练预测方式快速
  • JVM(类加载机制)
  • C++ 实战项目之 Boost 搜索引擎
  • 部署LVS+Keepalived高可用群集(抢占模式,非抢占模式,延迟模式)
  • 性别和年龄的视频实时监测项目
  • 【Spring面试题】
  • 打车代驾小程序开发 醉酒不用怕一键找代驾
  • 蓝桥集训之统计子矩阵
  • 架构师十项全能 你会几个?
  • 数据库(mysql)-新手笔记(主外键,视图)
  • 西门子PLC的交互界面怎样设计?
  • 备份 ChatGPT 的聊天纪录
  • 支持向量机 SVM | 线性可分:软间隔模型
  • 基于Java的生活废品回收系统(Vue.js+SpringBoot)
  • Linux:好用的Linux指令
  • Python Tkinter GUI 基本概念
  • Python实习生(自动化测试脚本开发) - 面经 - TCL新技术有限公司
  • 遥遥领先!基于transformer变体的时间序列预测新SOTA!
  • Java实现从本地读取CSV文件数据