elementUI樹形組件的load屬性


在elementUI的官方文檔中介紹了load方法,但是並沒有介紹load方法使用的實例,今天我們就來捋一捋loda方法:

load屬性需要傳入一個該樹形節點加載時所調用的函數,此函數函數接收兩個參數,一個是node,即當前節點,一個是resolve作為數據處理函數,不懂這個函數的同學可以看看Promise

這里我要實現一個這樣的樹形結構圖,話不多說,上圖:

 

 

下面是elementUI代碼:

  <el-tree :props="defaultProps" @node-click="handleNodeClick" lazy accordion :load="treeLoad" highlight-current></el-tree>

  值得注意的是,樹形組件懶加載需要添加lazy屬性,load才會生效,詳細介紹請參考官方文檔,prpps屬性為樹形組件的默認配置,我的代碼如下:

      defaultProps: {//樹形組件的配置
            children: 'children',
            label: 'name',
            isLeaf: 'is_leaf'
       },
    這里需要注意的是這里的lable、isLeaf屬性值為后台傳過來代表lable和isLeaf的字段名,我這邊后台傳過來的lable和IsLeaf分別是name和is_leaf,isLeaf只能識別bool值,如果后台傳的是0,1則需要進行轉換。
   接下來我們康康handleNodeClick函數,這個函數可以通過接受一個參數來打印當前節點的信息:
      ...
  methods: {
    handleNodeClick(data) { //
               console.log(data);
           },
 }

 

 當然在這里這個函數並沒有什么用...

接下來看treeLoad函數:

methods: {

  treeLoad(node, resolve) {
               if(node.level == 0) {
                 this.getData(resolve);
               }
               if(node.level >= 1) {
                this.sonTreeLoad(node,resolve)
               }
           }

}

  因為這個函數已經對參數node進行了處理,所以才導致hangdleNodeClick可以不需要。

  再來看看上面這個函數調用的getData函數,

getData(resolve) { //獲取類目列表
               axios.post(url,{
                   token:token,
                   parent_id: 0,
                   country: 'us'
               }).then(res=>{     
                               var data = res.data.data;
                               for(var i=0 ; i<data.length; i++){
                                   data[i].name += '\n' + data[i].ch_name;//這里需求需要中文和英文分行,插入分行符,需要搭配white-space: pre-wrap屬性
                                   data[i].is_leaf == 1 ? data[i].is_leaf = true :  data[i].is_leaf = false; //因為后台傳過來的是0|1,所以這里轉化為true和false
                                   resolve(res.data.data);   
                   }
               }).catch(err=>{
                   console.log(err)
               })
           }
  最后來看看sonTreeLoad函數:
  sonTreeLoad(node,resolve){
               axios.post(url,{
                   token: getToken('Admin-Token'),
                   country: 'us',
                   parent_id: node.data.id
               }).then(res=>{
         var data = res.data.data;
                               for(var i=0 ; i<data.length; i++){
                                   data[i].name += '\n' + data[i].ch_name;
                                   data[i].is_leaf == 1 ? data[i].is_leaf = true :  data[i].is_leaf = false; 
                                   resolve(res.data.data);   
                     }
               }).catch(err=>{
                   console.log(err)
               })
           }
可以看到除了傳入的參數有一個不同之外,其他地方基本大同小異。。。。

 


免責聲明!

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



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