在Lightning中使用Datatables實現表頭固定(Fixed Header)和列固定(Fixed Columns)


1.引入Datatables

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}"/>

afterScriptsLoaded方法隨便寫一個就行,但是不能不寫。

controller:

scriptsLoaded: function(component, event, helper) {

$("document").ready(function(){

console.log("jQuery load complete.");

});

}

 

2.數據加載完畢以后,等一會兒再使用Datatables初始化table。(即使在render event中去渲染有時也會出現問題)

controller:

doInit: function(component, event, helper) {

 

……(retrieve data code here)……

 

setTimeout(function(){ 

helper.initDataTable();

}, 500);

}

3.注意使用CLASS選擇器而不要使用ID選擇器(具體為什么不知道,反正這么干就對了)

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{

 

            $('.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兩個解決方案,感興趣可以研究一下。

但是由於lightning結構特別怪異,渲染完全看心情那種,所以試了一下retrieve:true和destroy:true都不能解決問題。

但是按照第3點中的結構去渲染就沒問題了(別問這是啥原理,我是瞎試試出來的,沒有原理)。


免責聲明!

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



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