1.引入Datatables和jQuery

(需要先将官网下载的zip包上传到Static Resource)

component:

<aura:component>
    <ltng:require styles="{!join(',',
            $Resource.DataTables + '/DataTables-1.10.22/css/jquery.dataTables.min.css',
            $Resource.DataTables + '/FixedHeader-3.1.7/css/fixedHeader.dataTables.min.css',
            $Resource.DataTables + '/FixedColumns-3.3.1/css/fixedColumns.dataTables.min.css'
        )}" scripts="{!join(',', 
            $Resource.jQuery, 
            $Resource.DataTables + '/DataTables-1.10.22/js/jquery.dataTables.min.js',
            $Resource.DataTables + '/FixedHeader-3.1.7/js/dataTables.fixedHeader.min.js',
            $Resource.DataTables + '/FixedColumns-3.3.1/js/dataTables.fixedColumns.min.js'
        )}" afterScriptsLoaded="{!c.scriptsLoaded}" />
</aura:component>

controller:

scriptsLoaded: function(component, event, helper) {
    $("document").ready(function(){
        console.log("jQuery load complete.");
    });
} 

2.在doInit方法中获取数据,然后设置一个5秒的延迟去初始化Datatable(要等原生table渲染完,再用Datatable渲染)

controller:

({
    doInit: function (component, event, helper) {
       
        // 在这里编写一些初始化数据的代码

        // 数据初始化完以后等5秒再用DataTable插件渲染table
        setTimeout(function () {
            helper.initDataTable();
        }, 500);
    }
})

3.初始化Datatable

component:

<table class="myTableForEdit">……</table>

helper:

({
    initDataTable: function () {
        // 此方法在页面运行时可能会被调用多次,因此需要判读table是否已被初始化
        if ($.fn.dataTable.isDataTable('.myTableForEdit') === false) {
            $('.myTableForEdit').DataTable({
                destroy: true,
                info: false,
                ordering: false,
                paging: false,
                searching: false,
                scrollX: true,
                scrollY: "400px",
                scrollCollapse: true,
                fixedHeader: true, // 固定首行
                fixedColumns: {
                    leftColumns: 7 // 从左往右,要固定几列就写几
                }
            });
        } else {
            // 如果已经初始化过了,就先destroy,再重新初始化
            $('.myTableForEdit').DataTable().destroy();
            $('.myTableForEdit').DataTable({
                destroy: true,
                info: false,
                ordering: false,
                paging: false,
                searching: false,
                scrollX: true,
                scrollY: "400px",
                scrollCollapse: true,
                fixedHeader: true, // 固定首行
                fixedColumns: {
                    leftColumns: 7 // 从左往右,要固定几列就写几
                }
            });
        }
    }
})

4.扩展:

https://datatables.net/manual/tech-notes/3

Datatables不可以重复渲染table,可以用retrieve和destroy两个方法来解决此问题,感兴趣可以研究一下。

posted on 2020-10-30 16:24  Lancen  阅读(1539)  评论(0编辑  收藏  举报