位置: IT常识 - 正文

若依框架前端切换TagView时刷新问题(若依框架用到的技术)

编辑:rootadmin
若依框架前端切换TagView时刷新问题

推荐整理分享若依框架前端切换TagView时刷新问题(若依框架用到的技术),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:若依框架入门,若依框架部署,若依框架入门,若依框架前后端分离,若依框架用到的技术,若依框架前端如何通过后端加载页面,若依框架前端如何通过后端加载页面,若依框架前后端分离,内容如对您有帮助,希望把文章链接给更多的朋友!

若依框架点击顶部tag切换时,永远都是刷新的。刷新问题两种情况:普通view切换时刷新及iFrame切换刷新 一、普通view切换时刷新

原因是view的name与在菜单填写的大小写不一致,按若依框架规则,路由地址必须写为 camel 驼峰命名形式,组件名称必须写为 pascal首字母全大写的形式。

参考:若依 | 点击顶部 tag 标签不自动刷新 - shayloyuki - 博客园

二、iFrame切换刷新问题

若依框架前端切换TagView时刷新问题(若依框架用到的技术)

 原因是iframe无法通过keep-alive缓存内容节点,每次都需要重新渲染刷新,iframe中keep-alive机制失效原因:iframe页里的内容并不属于节点的信息,所以使用keep-alive依然会重新渲染iframe内的内容。而且iframe每一次渲染就相当于打开一个新的网页窗口,即使把节点保存下来,在渲染时iframe页还是刷新的。

参考:1.vue中keep-alive对引入iframe的页面无效,实现iframe页面缓存问题_vue iframe 缓存_ll7425的博客-CSDN博客

2.GitHub - jmx164491960/vue-iframe-demo: 在vue中实现iframe keep-alive

解决思路: route-link点击切换时用route-view渲染呈现,若component为空时则不呈现,可以增加一个iframe组件在route-view旁边,同时监听路由,若是需要iframe呈现则显示,置空component,并给予iframe的src链接就完成呈现,再控制切换时用v-show控制显示当前路由即可。

改造若依步骤: 1.在获取路由时,判断iframe标识的置空component,打开文件src\store\modules\permission.js

 

2.改造route-view呈现iframe内容 (暂时没空分析,不懂的加好友提问吧,把代码贴上来)

修改文件src\layout\components\AppMain.vue

<template>  <section class="app-main">    <transition name="fade-transform" mode="out-in">      <keep-alive :include="cachedViews">        <router-view :key="key" />      </keep-alive>    </transition>    <!-- iframe页 -->    <iframe v-for="item in componentsArr" :ref="item.name" :id="item.name" frameborder="no"      :style="'width: 100%; height:' +height" scrolling="auto" v-show="$router.currentRoute.path.endsWith(item.path)"/>  </section></template><script>import Cookies from "js-cookie";export default {  name: "AppMain",  data() {    return {      componentsArr: [],      height: document.documentElement.clientHeight - 94.5 + "px;",    };  },  created() {    // 设置iframe页的数组对象    const componentsArr = this.getComponentsArr();        this.componentsArr = componentsArr;    // 判断当前路由是否iframe页    setTimeout(() => {      this.isOpenIframePage();    }, 200);      },  mounted: function () {    setTimeout(() => {      this.loading = false;    }, 300);    const that = this;    window.onresize = function temp() {      that.height = document.documentElement.clientHeight - 94.5 + "px;";    };  },  computed: {    cachedViews() {      return this.$store.state.tagsView.cachedViews;    },    key() {      return this.$route.path;    },      },  watch: {    $route() {      // 判断当前路由是否iframe页      this.isOpenIframePage();    },  },  methods: {    // 根据当前路由设置hasOpen    isOpenIframePage() {        debugger;        var path = this.$router.currentRoute.path.split("/").pop();            var iframe=this.$refs[path];      if(iframe)      {        iframe=iframe[0];      }      if (iframe&&!iframe.isbindsrc) {        this.code = this.$router.currentRoute.query.code;        let menuId = this.$router.currentRoute.meta.menuId;        let uuid = Cookies.get("uuid");        let menuCode = this.$router.currentRoute.meta.menuCode;        let link =          this.$router.currentRoute.meta.frameAddress ||          "/yizumiapi/yisee/tabs2";        if (link.indexOf("?") >= 0) {          link += "&";        } else {          link += "?";        }        let url =          link + "menuId=" + menuId + "&uuid=" + uuid + "&mcode=" + menuCode;          iframe.src = url;          iframe.isbindsrc="true"      }    },    // 遍历路由的所有页面,把含有iframeComponent标识的收集起来    getComponentsArr() {      const routers = this.$store.state.permission.iframeRoutes; //this.$router;      //const routers = router.options.routes;      var iframeMenus = [];      var genMenus = (routes) => {        routes.forEach((item, index) => {          if (item.meta && item.meta.frameAddress) {            var it = Object.assign(item);            delete it.children;                       iframeMenus.push(it);          }          if (item.children) {            genMenus(item.children);          }        });      };      genMenus(routers);      return iframeMenus;    },  },};</script><style lang="scss" scoped>.app-main {  /* 50= navbar  50  */  min-height: calc(100vh - 50px);  width: 100%;  position: relative;  overflow: hidden;}.fixed-header+.app-main {  padding-top: 50px;}.hasTagsView {  .app-main {    /* 84 = navbar + tags-view = 50 + 34 */    min-height: calc(100vh - 84px);  }  .fixed-header+.app-main {    padding-top: 84px;  }}</style><style lang="scss">// fix css style bug in open el-dialog.el-popup-parent--hidden {  .fixed-header {    padding-right: 17px;  }}</style>

src\store\modules\permission.js 代码

import auth from '@/plugins/auth'import router, { constantRoutes, dynamicRoutes } from '@/router'import { getRouters } from '@/api/menu'import Layout from '@/layout/index'import ParentView from '@/components/ParentView'import InnerLink from '@/layout/components/InnerLink'const permission = { state: { routes: [], addRoutes: [], defaultRoutes: [], topbarRouters: [], sidebarRouters: [], iframeRoutes: [], }, mutations: { SET_ROUTES: (state, routes) => { state.addRoutes = routes state.routes = constantRoutes.concat(routes) }, SET_DEFAULT_ROUTES: (state, routes) => { state.defaultRoutes = constantRoutes.concat(routes) }, SET_TOPBAR_ROUTES: (state, routes) => { state.topbarRouters = routes }, SET_SIDEBAR_ROUTERS: (state, routes) => { state.sidebarRouters = routes }, SET_IFRAME_ROUTERS: (state, routes) => { state.iframeRoutes = routes }, }, actions: { // 生成路由 GenerateRoutes({ commit },appId) { return new Promise(resolve => { // 向后端请求路由数据 getRouters(appId).then(res => { const sdata = JSON.parse(JSON.stringify(res.data)) const rdata = JSON.parse(JSON.stringify(res.data)) const sidebarRoutes = filterAsyncRouter(sdata) const rewriteRoutes = filterAsyncRouter(rdata, false, true) const asyncRoutes = filterDynamicRoutes(dynamicRoutes); rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) router.addRoutes(asyncRoutes); commit('SET_ROUTES', rewriteRoutes) commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes)) commit('SET_DEFAULT_ROUTES', sidebarRoutes) commit('SET_TOPBAR_ROUTES', sidebarRoutes) debugger; commit('SET_IFRAME_ROUTERS', iframeRoutes) resolve(rewriteRoutes) }) }) } }}var iframeRoutes=[];// 遍历后台传来的路由字符串,转换为组件对象function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { return asyncRouterMap.filter(route => { if (type && route.children) { route.children = filterChildren(route.children) } if (route.component) { // Layout ParentView 组件特殊处理 if (route.component === 'Layout') { route.component = Layout } else if (route.component === 'ParentView') { route.component = ParentView } else if (route.component === 'InnerLink') { route.component = InnerLink } else { if(route.meta&&route.meta.frameAddress) { route.component=undefined; if(iframeRoutes.filter(c=>c.name==route.name).length==0) {iframeRoutes.push(route)} } else{ route.component = loadView(route.component) } } } if (route.children != null && route.children && route.children.length) { route.children = filterAsyncRouter(route.children, route, type) } else { delete route['children'] delete route['redirect'] } return true })}function filterChildren(childrenMap, lastRouter = false) { var children = [] childrenMap.forEach((el, index) => { if (el.children && el.children.length) { if (el.component === 'ParentView' && !lastRouter) { el.children.forEach(c => { c.path = el.path + '/' + c.path if (c.children && c.children.length) { children = children.concat(filterChildren(c.children, c)) return } children.push(c) }) return } } if (lastRouter) { el.path = lastRouter.path + '/' + el.path } children = children.concat(el) }) return children}// 动态路由遍历,验证是否具备权限export function filterDynamicRoutes(routes) { const res = [] routes.forEach(route => { if (route.permissions) { if (auth.hasPermiOr(route.permissions)) { res.push(route) } } else if (route.roles) { if (auth.hasRoleOr(route.roles)) { res.push(route) } } }) return res}export const loadView = (view) => { if (process.env.NODE_ENV === 'development') { return (resolve) => require([`@/views/${view}`], resolve) } else { // 使用 import 实现生产环境的路由懒加载 return () => import(`@/views/${view}`) }}export default permission
本文链接地址:https://www.jiuchutong.com/zhishi/300076.html 转载请保留说明!

上一篇:计算机视觉基础学习-图像拼接(计算机视觉基础知识)

下一篇:【node进阶】深入浅出前后端身份验证(下)---JWT(node实战)

  • iPhone14没有mini吗(iphone14还有mini吗)

    iPhone14没有mini吗(iphone14还有mini吗)

  • 小朋友兔子发型(xp要停止服务了)(儿童小兔子发型编发)

    小朋友兔子发型(xp要停止服务了)(儿童小兔子发型编发)

  • ppt的水印在哪里添加(ppt水印在哪里去掉)

    ppt的水印在哪里添加(ppt水印在哪里去掉)

  • 相册永久删除的照片怎么恢复(相册永久删除的照片还能恢复吗)

    相册永久删除的照片怎么恢复(相册永久删除的照片还能恢复吗)

  • 华为nova7pro屏幕容易碎吗(华为nova7pro屏幕材质是谁家的)

    华为nova7pro屏幕容易碎吗(华为nova7pro屏幕材质是谁家的)

  • vivo录屏怎么设置清晰度(vivo录屏怎么设置成铃声)

    vivo录屏怎么设置清晰度(vivo录屏怎么设置成铃声)

  • 锁屏壁纸自动变怎么弄(锁屏壁纸自动变化怎么设置)

    锁屏壁纸自动变怎么弄(锁屏壁纸自动变化怎么设置)

  • 微信公众号有什么用(微信公众号有什么作用)

    微信公众号有什么用(微信公众号有什么作用)

  • 充电器插在插座上不拔会有危险吗(充电器插在插座上费电吗)

    充电器插在插座上不拔会有危险吗(充电器插在插座上费电吗)

  • 抖音打不开怎样解决(抖音 打不开)

    抖音打不开怎样解决(抖音 打不开)

  • 华为微信小视频打不开(华为微信小视频模糊不清怎么办)

    华为微信小视频打不开(华为微信小视频模糊不清怎么办)

  • 台式电脑怎么设置屏保壁纸(台式电脑怎么设置密码)

    台式电脑怎么设置屏保壁纸(台式电脑怎么设置密码)

  • 一加8什么时候上市(一加8什么时候上市的手机)

    一加8什么时候上市(一加8什么时候上市的手机)

  •  华为mate30怎么返回上一步(华为mate30怎么恢复出厂设置)

    华为mate30怎么返回上一步(华为mate30怎么恢复出厂设置)

  • 电脑粘贴板在哪里(电脑粘贴板在哪里找?Windows剪切板开启和使用教程)

    电脑粘贴板在哪里(电脑粘贴板在哪里找?Windows剪切板开启和使用教程)

  • 序列号g开头的是什么(序列号g开头的苹果手机好不好)

    序列号g开头的是什么(序列号g开头的苹果手机好不好)

  • 荣耀系列手机上市顺序(荣耀手机样子)

    荣耀系列手机上市顺序(荣耀手机样子)

  • 京东账号忘了怎么办(京东账号忘了怎么找回换手机号了)

    京东账号忘了怎么办(京东账号忘了怎么找回换手机号了)

  • 淘宝申请退款最多几次(淘宝申请退款最快多久到账)

    淘宝申请退款最多几次(淘宝申请退款最快多久到账)

  • qq转文字的功能在哪(qq转文字的功能怎么取消)

    qq转文字的功能在哪(qq转文字的功能怎么取消)

  • excel怎么制做表格(excel怎么制作表)

    excel怎么制做表格(excel怎么制作表)

  • 监控停电了还能用吗(监控停电了还能看回放吗)

    监控停电了还能用吗(监控停电了还能看回放吗)

  • ipad发热正常吗(ipad发热严重吗)

    ipad发热正常吗(ipad发热严重吗)

  • 华为nova5i怎么用(华为nova5i怎么用语音唤醒语音助手)

    华为nova5i怎么用(华为nova5i怎么用语音唤醒语音助手)

  • 华为p30是快充吗(华为p30是快充吗还是慢充)

    华为p30是快充吗(华为p30是快充吗还是慢充)

  • 荣耀20多少w快充(荣耀20多少w快充正常)

    荣耀20多少w快充(荣耀20多少w快充正常)

  • 怎样缩小图片内存(怎样缩小图片内存大小不改变像素)

    怎样缩小图片内存(怎样缩小图片内存大小不改变像素)

  • Win7系统右键菜单没有“删除”怎么办?(win7系统右键菜单太多怎么办)

    Win7系统右键菜单没有“删除”怎么办?(win7系统右键菜单太多怎么办)

  • uniapp实现app检查更新与升级-uni-upgrade-center详解(uniapp登陆检查)

    uniapp实现app检查更新与升级-uni-upgrade-center详解(uniapp登陆检查)

  • 织梦只允许会员积分大于100的会员投稿或者发表评论(织梦会员系统)

    织梦只允许会员积分大于100的会员投稿或者发表评论(织梦会员系统)

  • 增值税普通
  • 建筑业挂靠企业所得税如何收取
  • 个体户减免增值税
  • 期初未缴税额本年累计是什么意思
  • 房租违约金收入怎么做账
  • 或有负债在报表附注哪里
  • 购车税叫什么
  • 收到的增值税
  • 买房印花税怎么计算出来
  • 产品检验费怎样做账?
  • 不含税的营业收入是什么意思
  • 期初未交增值税借方余额
  • 税金及附加小于应缴纳所得税是什么原因
  • 设备安装和设备出售的税率一样吗
  • 出口退税管理系统怎么登录
  • 退税文件提醒怎么看
  • 关于财产保险公司的论文
  • 贴息债券计算公式
  • Mac怎么用有线网络
  • 系统升级为win11
  • 一般纳税人怎么算税
  • 长期闲置的机器叫什么
  • 在国内和国外
  • 企业库存太多后果
  • linux不能联网怎么解决
  • 出租其取得的不动产是什么意思
  • 现金流量表 科目
  • php文件如何使用
  • js倒数
  • PHP中set_include_path()函数相关用法分析
  • 如果企业一直亏损不交所得税会被税局稽查吗
  • 小规模纳税人定义
  • 研发费用范围归集不正确
  • 股本和库存股有什么区别
  • db management
  • sql server nullif
  • 租集体土地建厂合法吗
  • 收到报销单如何处理
  • 普通发票应怎么开具
  • 以前年度损益调整
  • 企业流动资产周转率低说明什么
  • 企业所得税汇算表
  • 转增股股价
  • 车辆使用费怎么算
  • 一般纳税人证明在哪里开具
  • 哪些费用可以入开办费
  • 城镇土地使用税的计税依据
  • 公司委托银行付款的账务处理
  • 资产评估增值的调整方法
  • 企业搬迁安置费一般怎么赔
  • 进项发票已入账进项税,但是未抵扣怎么办
  • 个人保险发票能做账吗
  • 小微企业税控盘维护费每年都要交吗
  • 维修基金只有收据没有发票吗
  • 房地产企业前期围墙费用
  • 备用金怎么做会计科目
  • 企业进行长期投资的意义
  • mysql中mysqldump
  • sql server删除重复数据保留一条
  • ssh命令行登录服务器
  • ubuntu怎样
  • 重装Windows11
  • win7z
  • c#使用mongodb
  • opengl获取鼠标位置
  • opengl入门教程(精)
  • nodejs网站开发
  • linux shell脚本攻略(第3版)
  • Metaio in Unity3d 教学--- 一. 搭建环境,运行官方案例
  • 动态生成类对象
  • 焦点问题是什么
  • 广东省电子税务局app下载手机版
  • 国家税务总局河南省税务平台
  • 湖北省税务系统欠税管理工作指南
  • 事前监督的名词解释
  • 浙江省发票勾选认证操作流程2021
  • 电子发票开票失败怎么回事?
  • 沈阳国税局局长是谁
  • 沈阳税务机关地区编号
  • 上海个税100万元工资多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设