layUI 子页面传值到父页面并刷新

4 篇文章 0 订阅
2 篇文章 0 订阅

父页面 (parent.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>父页面</title>
     <link rel="stylesheet" href="https://www.layuicdn.com/layui/css/layui.css">
 
</head>
<body>
    <div style="padding: 20px;">
        <button class="layui-btn" id="openChild">打开子页面</button>
        <table class="layui-hide" id="table" lay-filter="tableFilter"></table>
    </div>
   <script src="https://www.layuicdn.com/layui/layui.js"></script>
    <script>
        layui.use(['table', 'layer'], function(){
            var table = layui.table;
            var layer = layui.layer;

            // 初始化静态数据
            var staticData = [
                {id: 1, username: 'user1', email: 'user1@example.com'},
                {id: 2, username: 'user2', email: 'user2@example.com'},
                {id: 3, username: 'user3', email: 'user3@example.com'},
                {id: 4, username: 'newUser', email: 'newuser@example.com'}
            ];

            // 渲染表格
            table.render({
                elem: '#table',
                id: 'tableId',
                data: staticData, // 使用静态数据
                cols: [[
                    {field: 'id', title: 'ID', width: 80, sort: true},
                    {field: 'username', title: '用户名', width: 120},
                    {field: 'email', title: '邮箱', width: 200}
                ]],
                page: true // 启用分页
            });

            // 打开子页面
            document.getElementById('openChild').onclick = function() {
                layer.open({
                    type: 2,
                    title: '子页面',
                    area: ['600px', '400px'],
                    content: 'child.html'
                });
            };

            // 接收子页面传递的数据,并根据选中的ID来过滤表格
            window.receiveDataFromChild = function(selectedId) {
                console.log('Received ID from child:', selectedId);

                // 根据传递的ID进行过滤
                var filteredData = staticData.filter(function(item) {
                    return item.id === selectedId;
                });

                // 重新加载表格数据
                table.reload('tableId', {
                    data: filteredData,
                    page: {
                        curr: 1 // 重新从第 1 页开始
                    }
                });
            };
        });
    </script>
</body>
</html>

子页面 (child.html) 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>子页面</title>
    <link rel="stylesheet" href="https://www.layuicdn.com/layui/css/layui.css">

</head>
<body>
    <div style="padding: 20px;">
        <table class="layui-hide" id="childTable" lay-filter="childTableFilter"></table>
        <button class="layui-btn" id="sendData">传递数据并关闭</button>
    </div>

       <script src="https://www.layuicdn.com/layui/layui.js"></script>
    <script>
        layui.use(['table', 'layer'], function(){
            var table = layui.table;

            // 子页面的静态数据
            var childData = [
                {id: 1, username: 'user1', email: 'user1@example.com'},
                {id: 2, username: 'user2', email: 'user2@example.com'},
                {id: 3, username: 'user3', email: 'user3@example.com'},
                {id: 4, username: 'newUser', email: 'newuser@example.com'}
            ];

            // 渲染子页面表格
            table.render({
                elem: '#childTable',
                id: 'childTableId',
                data: childData,
                cols: [[
                    {type: 'radio'}, // 单选
                    {field: 'id', title: 'ID', width: 80, sort: true},
                    {field: 'username', title: '用户名', width: 120},
                    {field: 'email', title: '邮箱', width: 200}
                ]],
                page: true // 启用分页
            });

            // 选中行时触发
            table.on('radio(childTableFilter)', function(obj){
                console.log('Selected row:', obj.data);
                selectedId = obj.data.id; // 获取选中的ID
            });

            // 传递选中的行的ID给父页面
            document.getElementById('sendData').onclick = function() {
                if (typeof selectedId !== 'undefined') {
                    window.parent.receiveDataFromChild(selectedId);
                } else {
                    alert('请先选择一行数据!');
                }

                // 关闭当前子页面的 layer 弹出层
                var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
                parent.layer.close(index); // 关闭窗口
            };
        });
    </script>
</body>
</html>

示例说明

  • 父页面 (parent.html)

    • table 初始化时加载一组静态数据。
    • 当子页面传递数据时,通过 receiveDataFromChild 函数接收选中的 ID,并将数据作为过滤条件来过滤表格的数据。
    • 过滤后的数据被重新加载到表格中,只显示选中 ID 对应的记录。
  • 子页面 (child.html)

    • 子页面表格使用单选框让用户选择一行。
    • 选中行后,用户点击“传递数据并关闭”按钮,将选中的行的 ID 传递到父页面,然后关闭子页面。

使用步骤

  1. 打开 parent.html 页面。
  2. 点击“打开子页面”按钮,会弹出 child.html 子页面。
  3. 在子页面中选择一个行(单选),然后点击“传递数据并关闭”按钮,父页面的 table 列表将根据选中的 ID 进行过滤并显示。

注意事项

  • 如果在子页面没有选择任何行而点击“传递数据并关闭”,会有一个提示让用户先选择一行数据。
  • 父页面接收到的 ID 是通过过滤本地数据集来实现数据表格的重新加载。
  • 这种方法适用于前端静态数据。如果需要处理大量数据或复杂的查询,建议在服务器端实现查询过滤功能。
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战族狼魂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值