LayUI的Tab選項卡切換顯示對應數據


LayUI tab選項卡 + 分頁展示 實現 Tab選項卡切換顯示對應數據

要求:實現tab選項卡改變的同時展示數據也跟着改變
實現條件:
1、選項卡【官網 – 文檔/示例 – 頁面元素 – 選項卡】
2、數據表格【官網 – 文檔/示例 – 內置模塊 – 數據表格】
3、分頁【官網 – 文檔/示例 – 內置模塊 – 分頁】

具體實現過程:

1、 先找選項卡、使用默認的tab、然后查看代碼、復制對應的代碼。

2、 然后改成自己想要顯示效果、如下:

3、 然后查看具體的代碼如下:

4、 獲取Tab選項卡的狀態值
到目前為止、實現了點擊對應的Tab選項卡、展示對應的內容。但是、我現在要展示的訂單的狀態對應的數據、應拿到對應的每一個Tab選項卡的狀態值、然后將內容展示在對應的位置。那如何獲取每一個選項課的狀態值呢?
4.1 先給每一個Tab選項卡一個自定義屬性、用來存放狀態值。具體代碼如下:

4.2 獲取對應的值。在官網手冊文檔上、我們可以找到監聽Tab切換事件

4.3 獲取狀態
然后直接copy代碼到我們自己的目錄下、然后運行、會發現沒有效果。那如何解決呢?仔細看代碼、會發現監聽的是tab(filter)、那么我們需要給一個lay-filter。那這個filter給誰呢?還是回到手冊、往上看、會發現事件監聽中有一個默認情況下、那我們和它一樣、直接粘在class為layui-tab的div上即可、將filter換成我們自己的名字。到這一步、運行發現Tab選項卡切換的時候、可以獲取到對應的DOM元素、索引、容器等,那我們如何獲取對應的狀態碼呢?很簡單、和jQuery中的寫法一致、直接通過attr獲取即可、具體如下:

5、 數據展示 (分頁加載數據)
到這一步、基本工作完成了、效果也是OK。那么要實現Tab選項卡切換的時候、數據展示為我們自己的數據、同時根據選項卡狀態的不同、展示不同的數據。那么該如何操作呢?其實很簡答的,在每一個的div中加入數據展示表格table即可;然后再加分頁的代碼。
分頁如何加載、請看我的另外一篇文章。地址:https://www.cnblogs.com/laowenBlog/p/11240503.html


6、 到這一步、運行查看效果會發現默認的所有訂單數據是OK了、但是切換選項卡、其他的數據確沒有顯示。具體如下圖:


7、 解決顯示對應數據
那么這沒有數據又該如何解決呢?很簡單、會發現在table.rander加載的時候、只是將數據展示在全部訂單中了、(通過代碼elem: '#order_all'來體現)、那如何展示在應該展示的位置上呢?會發現我們已經在每一個table上給增加了id屬性、只要修改elem參數的值即可。那該如何解決這個問題呢?怎么讓它成動態的呢?很簡單、只需將table.rander寫在一個方法中、每一次切換選項卡的時候調用即可。
8、 最終實現效果如下:

9、 具體代碼
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>layui</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="./layui/css/layui.css" media="all">
    <script src="./layui/layui.js" charset="utf-8"></script>
</head>

<body>
    <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
        <legend>默認風格的Tab</legend>
    </fieldset>
    <div class="layui-tab" lay-filter="tab-all">
        <ul class="layui-tab-title">
            <li data-status="" class="layui-this">全部訂單</li>
            <li data-status="1">待付款</li>
            <li data-status="3">待收貨</li>
            <li data-status="5">已完成</li>
            <li data-status="6">已取消</li>
        </ul>
        <div class="layui-tab-content">
            <div class="layui-tab-item layui-show">
                <table class="layui-hide" id="order_all"></table>
            </div>
            <div class="layui-tab-item">
                <table class="layui-hide" id="order_pay"></table>
            </div>
            <div class="layui-tab-item">
                <table class="layui-hide" id="order_receive"></table>
            </div>
            <div class="layui-tab-item">
                <table class="layui-hide" id="order_finish"></table>
            </div>
            <div class="layui-tab-item">
                <table class="layui-hide" id="order_cancel"></table>
            </div>
        </div>
    </div>
    <script>
        layui.use(['element', 'table'], function () {
            // Tab的切換功能,切換事件監聽等,需要依賴element模塊
            var $ = layui.jquery, table = layui.table, element = layui.element;
            // 初始化加載
            getList('#order_all', '')
            // 監聽tab切換 操作:文檔 - 內置模塊 - 常用元素操作 element - 監聽tab切換
            element.on('tab(tab-all)', function (data) {
                // console.log(this);        // 當前Tab標題所在的原始DOM元素
                // console.log(data.index);  // 得到當前Tab的所在下標
                // console.log(data.elem);   // 得到當前的Tab大容器
                var status = $(this).attr('data-status')
                var position = '#order_all'
                switch (status) {
                    case '1': position = '#order_pay'; break;
                    case '3': position = '#order_receive'; break;
                    case '5': position = '#order_finish'; break;
                    case '6': position = '#order_cancel'; break;
                    default: position = '#order_all';
                }
                getList(position, status)
            })
            // 公共方法
            function getList(position, status = '') {
                table.render({
                    elem: position
                    , method: 'get'
                    , url: 'http://localhost/php/public/index.php/index/order/getList'
                    , where: {
                        status: status
                    }
                    , limit: 5
                    , limits: [2, 3, 5]
                    , request: {
                        pageName: 'page' //頁碼的參數名稱,默認:page
                        , limitName: 'size' //每頁數據量的參數名,默認:limit
                    }
                    , cellMinWidth: 80 //全局定義常規單元格的最小寬度,layui 2.2.1 新增
                    , cols: [[
                        { field: 'order_id', title: 'ID', sort: true }
                        , { field: 'order_create_time', title: '訂單創建時間' }
                        , { field: 'order_code', title: '訂單編號', sort: true }
                        , { field: 'goods_id', title: '商品id' }
                        , { field: 'produt_id', title: '貨品id' } //minWidth:局部定義當前單元格的最小寬度,layui 2.2.1 新增
                        , { field: 'order_product_num', title: '購買的數量', sort: true }
                        , { field: 'order_price_one', title: '單價', sort: true }
                        , { field: 'order_price_all', title: '總價' }
                        , { field: 'statusName', title: '狀態', sort: true }
                        , { field: 'action', title: '操作', sort: true }
                    ]]
                    , page: true
                    , parseData: function (res) { //將原始數據解析成 table 組件所規定的數據
                        return {
                            "code": res.code, //解析接口狀態
                            "msg": res.msg, //解析提示文本
                            "count": res.data.total, //解析數據長度
                            "data": res.data.data //解析數據列表
                        };
                    }
                });
            }
        })
    </script>
</body>

</html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM