现象:
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);
});
},