首页 > 其他分享 >用layui +echarts 曲线图实现子页面向父页面传值,点击曲线图表上的点后删除该点,并在删除后自动刷新 layui 表格列表,并且按子页面传值和起止时间 刷新父页面

用layui +echarts 曲线图实现子页面向父页面传值,点击曲线图表上的点后删除该点,并在删除后自动刷新 layui 表格列表,并且按子页面传值和起止时间 刷新父页面

时间:2024-08-12 19:25:36浏览次数:17  
标签:layui value 图表 var 传值 页面

下面是一个完整的示例,展示了如何使用 layuiECharts 实现以下功能:

  1. 子页面向父页面传值
  2. 点击曲线图上的点后删除该点
  3. 删除后自动刷新 layui 表格列表
  4. 根据子页面传值和起止时间刷新父页面

文件结构

假设你有两个文件:

  1. 父页面 (index.html)
  2. 子页面 (child.html)

1. 子页面 (child.html)

这是一个简单的子页面,包含一个输入框和一个按钮,点击按钮后将输入框的值传递给父页面。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>子页面</title>
</head>
<body>

<label>输入值: <input type="text" id="inputValue"></label>
<button onclick="sendValue()">传值给父页面</button>

<script>
    function sendValue() {
        var value = document.getElementById('inputValue').value;

        // 使用 postMessage 传值给父页面
        window.parent.postMessage({ value: value }, '*');
    }
</script>

</body>
</html>

2. 父页面 (index.html)

父页面包含 ECharts 图表、起止时间选择、layui 表格,以及一个用于嵌入子页面的 iframe。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>父页面</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layui-v2.6.8/dist/css/layui.css">
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/layui-v2.6.8/dist/layui.all.js"></script>
</head>
<body>

<div>
    <label>起始时间: <input type="date" id="startTime"></label>
    <label>结束时间: <input type="date" id="endTime"></label>
</div>
<div id="chart" style="width: 600px; height: 400px;"></div>
<table class="layui-table" id="dataTable"></table>

<iframe src="child.html" style="width: 100%; height: 100px;"></iframe>

<script>
    var myChart = echarts.init(document.getElementById('chart'));
    var data = [];

    // 初始化数据
    function initData(filterValue) {
        // 模拟数据检索
        var allData = [
            { name: 'A', value: [1, 10], date: '2024-08-01' },
            { name: 'B', value: [2, 20], date: '2024-08-02' },
            { name: 'C', value: [3, 30], date: '2024-08-03' },
            { name: 'D', value: [4, 40], date: '2024-08-04' }
        ];

        // 获取时间过滤范围
        var startTime = new Date(document.getElementById('startTime').value);
        var endTime = new Date(document.getElementById('endTime').value);

        data = allData.filter(function(item) {
            // 通过传值进行过滤
            var isValid = item.name.includes(filterValue);

            // 通过时间范围进行过滤
            var itemDate = new Date(item.date);
            var inTimeRange = (!isNaN(startTime) && !isNaN(endTime)) ? (itemDate >= startTime && itemDate <= endTime) : true;

            return isValid && inTimeRange;
        });

        refreshChart();
        refreshTable();
    }

    // 监听来自子页面的消息
    window.addEventListener('message', function(event) {
        var filterValue = event.data.value;
        initData(filterValue);
    }, false);

    // 刷新图表
    function refreshChart() {
        myChart.setOption({
            xAxis: { type: 'value' },
            yAxis: { type: 'value' },
            series: [{
                type: 'line',
                data: data.map(function (item) {
                    return item.value;
                })
            }]
        });
    }

    // 刷新表格
    function refreshTable() {
        layui.use('table', function () {
            var table = layui.table;

            // 渲染表格
            table.render({
                elem: '#dataTable',
                cols: [[
                    { field: 'name', title: 'Name' },
                    { field: 'value', title: 'Value' }
                ]],
                data: data
            });
        });
    }

    // 点击事件删除点并刷新表格
    myChart.on('click', function (params) {
        var index = params.dataIndex;
        if (index !== undefined) {
            // 从数据中删除该点
            data.splice(index, 1);

            // 更新图表和表格
            refreshChart();
            refreshTable();
        }
    });

    // 初次加载数据
    initData('');
</script>

</body>
</html>

3. 功能说明

  • 传值机制:子页面通过 postMessage 向父页面传递值,父页面监听 message 事件接收传递的值并更新数据。
  • 时间范围过滤:父页面根据起止时间和传递的值过滤数据。
  • 图表点删除:点击 ECharts 图表上的点会删除相应的数据点,并自动刷新图表和 layui 表格。

4. 运行步骤

  1. 打开 index.html 作为父页面。
  2. 在子页面的输入框中输入值,点击按钮将值传递给父页面。
  3. 父页面根据传递的值和选择的时间范围进行数据过滤并更新图表和表格。
  4. 点击图表中的点,会删除该点对应的数据并刷新表格。

标签:layui,value,图表,var,传值,页面
From: https://blog.csdn.net/nndsb/article/details/141136866

相关文章

  • 金蝶云星空打开子界面后,子界面操作保存成功后关闭父窗体刷新父页面
     一、业务需求售后单界面点击按钮打开其他入界面,关闭其他入库单时是否刷新售后单,分两种情况:第一种:刷新:保存成功才刷新父窗体;第一次保存成功再次保存失败,刷新第二种:以下情况不刷新:不操作保存直接关闭其他入库单操作保存但是报错无法保存而关闭其他入库单 二、开发实......
  • 帝国CMS列表页面调用关键字TAG的方法
    $nsmalltext=$r[smalltext];$ntext=strip_tags($nsmalltext);//去除内容简介里的HTML标签$newtext=esub($ntext,100,&#39;...&#39;);//限制100字$keyboard=$r[keyboard];$r_tag=explode(",",$keyboard);$tempid=1;//这里是搜索模板IDfor($i=0;$i<count($r_tag);$i++)......
  • 微信小程序如何实现页面传参
    目录前言路径传递在onLoad里接收参数 其他位置获取参数全局变量数据缓存事件通信使用wx自定义小程序全局方法和全局变量 总结前言只要你的小程序超过一个页面那么可能会需要涉及到页面参数的传递,下面我总结了n 种页面方法。路径传递通过在url后面拼接参数,......
  • 动态添加页面
    方式一:<div><spanclass="smartText2"style="margin-top:60px;"@click="handleTips('近期俄乌事件的态势分析')">近期俄乌事件的态势分析</span></div><div><spanclass="smartText2......
  • Vs+Qt添加ui子页面
    在Qt项目中,如果要实现一个弹出子界面并包含返回按钮的功能,最合适的选择是使用QtDialogFormFile来创建子界面。QtDialogFormFile与QtWidgetFormFile的区别QtDialogFormFile(ButtonBottom)和QtDialogFormFile(ButtonRight):这两种文件类型用于创建对话......
  • react-navigation使用redux-saga等处理各种跳转、清除堆栈、返回不同页面的问题
    react-navigation使用redux-saga等处理各种跳转、清除堆栈、返回不同页面的问题名字还是土一点好关注IP属地:上海0.272018.01.2114:26:36字数154阅读4,027一直没有找到有关于 react-navigation 处理app各种不同状态需要默认不同首页的例子,于是只能自己写了。整个......
  • MAUI Blazor学习17-NavigationLock阻止页面回退
    MAUIBlazor学习17-NavigationLock阻止页面回退 MAUIBlazor系列目录MAUIBlazor学习1-移动客户端Shell布局-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习2-创建移动客户端Razor页面-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习3-绘制ECharts图表-S......
  • 034.Vue3入门,插槽Slot中同时显示主页面和插槽页面的内容
    1、App.vue代码:<template><div><h3>主页面</h3><Slot001v-slot="slotProps"><h4>{{msg}}==={{slotProps.msg}}</h4></Slot001></div></template><script>i......
  • 035.Vue3入门,使用具名插槽Slot中,同时显示主页面和多个插槽页面内容
    1、App.vue代码如下:<template><div><h3>主页面</h3><Slot001><template#s1="slotProps"><h4>{{msg}}==={{slotProps.msg1}}</h4></template><template#s2......