在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法


Posted in Javascript onSeptember 10, 2019

最近,在项目中使用到了layer。layer的弹层组件可以说是非常好用,layer 至今仍作为 layui 的代表作。在项目中,需要实现一个在表格里面点击操作,然后弹出layer层,将父层表格的行值传给子页面,子页面拿到值后,进行业务处理,从而实现真正的父子页面交互。

其实,官方文档都说的很清楚了。

layui官方文档:http://layer.layui.com/

使用版本:2.3.0

在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法

在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法

只是,需要我们耐心的读懂文档内容,然后根据自己的业务情况,实现自己想要的效果。

一、子页面获取父页面数据

子页面,要获取父页面的内容,需要使用到layui的一个关键字:parent。通过parent,子页面就可以获取到父页面上的数据了。

例子:从父页面的表格中,点击行的操作按钮,弹出layer层,并将该行的数据传给layer层。

在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法

<table id="role_tb" class="layui-table" lay-data="{width: 1007, height:365, url:'http://localhost:8080/rolelist', page:false, id:'idTest'}" lay-filter="demo">
  <thead>
  <tr>
  <th lay-data="{field:'id', width:100, sort: true}">角色ID</th>
  <th lay-data="{field:'name', width:140}">角色名称</th>
  <th lay-data="{field:'description', width:250}">角色描述</th>
  <th lay-data="{field:'str_createdate', width:200, sort: true}">创建时间</th>
  <th lay-data="{field:'str_updatedate', width:200, sort: true}">更新时间</th>
  <th lay-data="{fixed: 'right', width:110, align:'center', toolbar: '#barDemo'}">操作</th>
  </tr>
  </thead>
 </table>

该表格是由layui根据后台接口动态渲染出来的,那么该如何获取点击按钮所处该行的数据呢?

下列方法完美解决了这个问题!

//这里设置一个空的json串,用于接受表格的行信息
var json;
 
layui.use('table', function(){
  var table = layui.table;
  //监听工具条
  table.on('tool(demo)', function(obj){
   var data = obj.data;
    if(obj.event === 'find'){
    //这行是监听到的表格行数据信息,复制给json全局变量。 
    json = JSON.stringify(data);
    layui.use('layer', function () {
    layer.open({
    title: '查看权限',
    maxmin: true,
    type: 2,
    content: './privileages-manage.html',
    area: ['800px', '500px']
   });
   });
  }
  });
});

----------------------------------------------------这里是子层代码:

$(function () {
  //从父层获取值,json是父层的全局js变量。eval是将该string类型的json串变为标准的json串
  var parent_json = eval('('+parent.json+')');
  console.log(parent_json);  
});

看一下父层和子层的效果。

在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法

在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法

这样,子页面就从父页面获取到了数据。接下来就根据自己的业务,处理数据吧。

所以,可以通过parent关键字,子页面就可以调用父页面的变量、方法。还可以刷新父页面。

parent.location.reload(); // 父页面刷新

二、父页面获取子页面数据

进入layer官方文档,认真阅读,并且可以操作下面的代码,效果更佳直观。http://layer.layui.com/

//注意:parent 是 JS 自带的全局对象,可用于操作父页面
var index = parent.layer.getFrameIndex(window.name); //获取窗口索引
 
//让层自适应iframe
$('#add').on('click', function(){
 $('body').append('插入很多酱油。插入很多酱油。插入很多酱油。插入很多酱油。插入很多酱油。插入很多酱油。插入很多酱油。');
 parent.layer.iframeAuto(index);
});
//在父层弹出一个层
$('#new').on('click', function(){
 parent.layer.msg('Hi, man', {shade: 0.3})
});
//给父页面传值
$('#transmit').on('click', function(){
 parent.$('#parentIframe').text('我被改变了');
 parent.layer.tips('Look here', '#parentIframe', {time: 5000});
 parent.layer.close(index);
});
//关闭iframe
$('#closeIframe').click(function(){
 var val = $('#name').val();
 if(val === ''){
  parent.layer.msg('请填写标记');
  return;
 }
 parent.layer.msg('您将标记 [ ' +val + ' ] 成功传送给了父窗口');
 parent.layer.close(index);
});

以上这篇在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
超级简单的图片防盗(HTML),好用
Apr 08 Javascript
javascript生成随机数的方法
May 16 Javascript
异步JavaScript编程中的Promise使用方法
Jul 28 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
Jun 17 Javascript
基于angularjs实现图片放大镜效果
Aug 31 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
使用selenium抓取淘宝的商品信息实例
Feb 06 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
Jun 06 Javascript
angularjs的单选框+ng-repeat的实现方法
Sep 12 Javascript
详解如何理解vue的key属性
Apr 14 Javascript
前端面试知识点目录一览
Apr 15 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
Nov 09 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
Sep 10 #Javascript
layui表格 返回的数据状态异常的解决方法
Sep 10 #Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
Sep 10 #Javascript
vscode中eslint插件的配置(prettier配置无效)
Sep 10 #Javascript
layer.open回调获取弹出层参数的实现方法
Sep 10 #Javascript
VScode格式化ESlint方法(最全最好用方法)
Sep 10 #Javascript
npm 语义版本控制详解
Sep 10 #Javascript
You might like
php新浪微博登录接口用法实例
2014/12/23 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
jquery json 实例代码
2010/12/02 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
php中and 和 &amp;&amp;出坑指南
2018/07/13 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
python使用PyGame模块播放声音的方法
2015/05/20 Python
python机器学习之KNN分类算法
2018/08/29 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
CSS3 简写animation
2012/05/10 HTML / CSS
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
中专毕业生自我鉴定
2014/02/02 职场文书
董事长助理岗位职责
2014/02/18 职场文书
小区物业门卫岗位职责
2014/04/10 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
焦点访谈观后感
2015/06/11 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
Golang中interface{}转为数组的操作
2021/04/30 Golang
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python