vue在IE浏览器下父页面向子页面传输对象时数据丢失

现象:

layer弹窗,父页面向子页面传输对象时数据丢失

父页面

javascript 复制代码
            editItem: function(index) { // 修改
                var data = getTableData();
                var row = data[index];

                dialogOpen({
                    id : 'editItemId',
                    title : '修改',
                    url : '../../contract/contractSubject/contractSubjectEdit.html?_' + $.now(),
                    width: '1024px',
                    height: '768px',
                    scroll : true,
                    success : function(iframeId) {
                        top.frames[iframeId].vm.contractSubject = JSON.parse(JSON.stringify(row));
                    },
                    yes : function(iframeId) {
                        // 子页面传值到父页面
                        var result = top.frames[iframeId].vm.acceptClick();
                        if (result) {
                            var temp = {};
                            Object.assign(temp, result);

                            data[index] = temp;
                            $('#dataGrid').bootstrapTable('load', data);

                            // 关闭窗口
                            dialogCloseById(iframeId);
                        }
                    }
                });
            },

子页面,效果:

解决方案:

往子页面传JSON字符串,$nextTick(子页面vue在 DOM 更新完成后执行回调函数),把JSON字符串转换为对象。

父页面:

javascript 复制代码
            editItem: function(index) { // 修改
                var data = getTableData();
                var row = data[index];

                dialogOpen({
                    id : 'editItemId',
                    title : '修改',
                    url : '../../contract/contractSubject/contractSubjectEdit.html?_' + $.now(),
                    width: '1024px',
                    height: '768px',
                    scroll : true,
                    success : function(iframeId) {
                        top.frames[iframeId].vm.init(JSON.stringify(row));
                    },
                    yes : function(iframeId) {
                        // 子页面传值到父页面
                        var result = top.frames[iframeId].vm.acceptClick();
                        if (result) {
                            var temp = {};
                            Object.assign(temp, result);

                            data[index] = temp;
                            $('#dataGrid').bootstrapTable('load', data);

                            // 关闭窗口
                            dialogCloseById(iframeId);
                        }
                    }
                });
            }

子页面:

javascript 复制代码
                init : function(rowStr) {
					// 初始化数据
					var _this = this;
					_this.$nextTick(function () {
						// vue在 DOM 更新完成后执行回调函数
						_this.contractSubject = JSON.parse(rowStr);
					});
				},
相关推荐
董员外1 分钟前
LangChain.js 快速上手指南:模型接入、流式输出打造基础
前端·javascript·后端
AomanHao5 分钟前
基于高德地图JS的旅游足迹,可嵌入个人博客中
前端
用户4099322502125 分钟前
Vue3组件开发中如何兼顾复用性、可维护性与性能优化?
前端·vue.js·trae
千寻girling6 分钟前
面试官 : “ 请问你实际开发中用过 函数柯理化 吗? 能讲一下吗 ?”
前端·javascript·面试
golang学习记7 分钟前
Claude Opus 4.6 正式发布:Agent 时代的编程王者与长上下文革命
前端·人工智能·后端
双向3310 分钟前
RAG实战解密:三步构建你的智能文档问答系统(附开源方案)
前端
DEMO派1 小时前
前端CSRF攻击代码演示及防御方案解析
前端·csrf
change_fate1 小时前
vite 修改base之后需要修改public路径
javascript·vue.js
REDcker1 小时前
Media Source Extensions (MSE) 详解
前端·网络·chrome·浏览器·web·js
阿珊和她的猫2 小时前
Chrome 的 SameSite 属性:原理与解决方案
前端·chrome