需要后端返回纯HTML数据,vue如何处理渲染

需求背景:

近期做项目,后端返回了银联支付的第三方Html数据,前端项目是vue框架,发现v-html无法处理,那么想到iframe

iframe的使用:

第一个 src属性,只接受 url
<iframe src=url></iframe>

不符合要求

第二个 srcdoc属性,可以接受标签也可以接受 含有html和body标签
<iframe srcdoc='<html><head>...</head></html>'></iframe>

符合需求

定义&用法
srcdoc 属性规定要显示在内联框架中的页面的 HTML 内容。

提示:该属性应该与 sandbox 和 seamless 属性一起使用。

如果浏览器支持 srcdoc 属性,且指定了 srcdoc 属性,它将覆盖在 src 属性中规定的内容。

如果浏览器不支持 srcdoc 属性,且指定了 srcdoc 属性,它将显示在 src 属性中规定的文件。

那么在vue如何使用,就相对简单了

建立一个空vue组件,使用iframe标签,用url变量,接口获取的数据就放url中,页面就自动加载就可以了

### Vue 动态渲染后端返回菜单数据 在构建基于Vue的应用程序时,特别是当涉及到后台管理系统的开发,动态加载和渲染来自后端的菜单数据是一项常见需求。这不仅提高了用户体验,还增强了应用的安全性和灵活性。 为了实现这一目标,在应用程序初始化阶段或用户登录成功之后,应当向服务器发送请求以获取用户的权限信息以及对应的菜单结构[^2]。一旦接收到这些数据,则可以通过编程方式将其转换为适合前端框架使用的格式,并利用组件化的方式展示给最终用户。 下面是一个简单的例子来说明如何操作: #### 获取并解析菜单数据 假设从API得到如下JSON格式的数据作为响应体的一部分: ```json [ { "id": 1, "name": "首页", "path": "/home" }, { "id": 2, "name": "系统设置", "children": [ {"id": 3,"name":"部门管理","path":"/system/department"}, {"id": 4,"name":"角色管理","path":"/system/role"} ] } ] ``` 接下来定义一个函数用于处理上述形式的数据,使之适应于`<router-link>`标签内的`:to`属性绑定: ```javascript function formatMenuData(rawMenus){ const formatted = rawMenus.map(item => ({ ...item, to: item.path ? { path:item.path } : undefined, children: Array.isArray(item.children)?formatMenuData(item.children):undefined })); return formatted.filter(Boolean); } ``` #### 创建递归组件以支持多层嵌套菜单 考虑到实际应用场景中的菜单可能具有多层次的关系链路,因此建议创建一个能够自我调用自身的组件——即所谓的“递归组件”。这样可以方便地表示任意深度级别的子项列表而无需预先知道具体层数量。 ```html <!-- MenuComponent.vue --> <template> <ul class="menu-list"> <li v-for="(menuItem,index) in menuItems" :key="index"> <!-- 如果存在路径则渲染链接;否则仅显示文本节点 --> <router-link v-if="menuItem.to" :to="menuItem.to">{{ menuItem.name }}</router-link> <span v-else>{{ menuItem.name }}</span> <!-- 对有孩子的项目再次调用本组件实例 --> <menu-component v-if="Array.isArray(menuItem.children)" :menu-items="menuItem.children"></menu-component> </li> </ul> </template> <script setup lang="ts"> import { defineProps } from 'vue'; // 定义接收父级传递过来的props参数 const props = defineProps({ menuItems:{ type:Array, required:true } }); </script> ``` 最后一步是在适当的位置引入这个新创建的组件并将之前准备好的菜单数组传入其中即可完成整个流程的设计与实施工作。 通过这种方式可以在Vue环境中有效地管理和呈现由后端提供的复杂层次化的导航条目集合[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值