最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue與ant-tree結(jié)合偽造懶加載并可以查詢

 更新時間:2023年07月03日 14:02:36   作者:忘れられたくない  
這篇文章主要為大家介紹了vue與ant-tree結(jié)合偽造懶加載并可以查詢實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

構(gòu)造原因

ant-tree異步加載數(shù)據(jù)查詢之后,節(jié)點不支持再次請求數(shù)據(jù),直接渲染全部節(jié)點后,數(shù)據(jù)量特別大(生成dom進行操作),會造成瀏覽器卡頓

思路:

1、switcherIcon重寫自定義樹節(jié)點的展開/折疊圖標

2、通過loaded狀態(tài)判斷是否完成了懶加載,當懶加載進行時,用loading狀態(tài)更改圖標

3、每次懶加載之后,給數(shù)據(jù)新建一個空的子節(jié)點,進行偽造懶加載(只有節(jié)點下有孩子節(jié)點時,才會有圖標)

view視圖

<a-input-search @search="onSearch" v-model.trim="searchStr"></a-input-search>
<a-tree
    @select="onSelect"
    :selectedKeys="selectedKeys"
    :treeData="treeData"
    :expandedKeys="expandedKeys"
    @expand="changeExpand"
    :replaceFields="{key:'id',title:'title',children:'children'}"
        >
    <template slot="switcherIcon" slot-scope="{loading}">
        <a-icon type="caret-down" v-if="loading"></a-icon>
        <a-icon type="loading" v-else></a-icon>
    </template>
    <template slot="title" slot-scope="{title}">
        <span v-html="
          title 
          ? title.replace(
            new RegExp(replaceKeywords,g),
            '<span style=color:#f50>'+title+'</span>'
            )
          : null"
        ></span>
    </template>
</a-tree>

加載樹

loadingData為最后展開的一層節(jié)點,方便首次加載默認展開層級

async loadTree(treeId,treeNode,isSearch){
    let params={treeId}
    let [err,res] = await loadTree(params);
    if(!err){
        if(res.result.code == 200){
            //存在樹節(jié)點
            if(treeId){
                treeNode.dataRef.children = this.getUpdateTree(res.result.data);
                this.treeData = [...this.treeData];
                this.loadingData = res.result.data
            }else{
                if(isSearch){
                    this.treeData = res.result.data;
                    this.expandedKeys = [];
                    this.getAllKey(this.treeData)
                }else{
                    this.treeData = this.getUpdateTree(res.result.data);
                    if(!this.treeData.length){return;}
                    //首次加載默認加載到第四層
                    this.expandedKeys = []
                    this.initTree(this.treeData,1,4)
                }
            }
        }
    }
}

initTree 初始化循環(huán)樹

默認展示到第幾層

async initTree(treeData,index,maxLevel){
    if(index > maxLevel || !treeData.length){return};
    treeData.map(item=>{
        if(item.childrenIds.length){
            let initLoaded = item.loaded;
            item.loaded = true;
            item.loading = true;
            let data = {dataRef:item}
            if(initLoaded){
                index++;
                treeData = item.children
                this.initTree(treeData,index,maxLevel);
                item.loading = false;
                this.expandedKeys.push(item.id);
                return;
            }
            setTimeOut(
                async ()=>{
                    let returnData = await this.onLoadData(data);
                    if(returnData.length){
                        index++;
                        treeData = this.loadingData;
                        this.initTree(treeData,index,maxLevel);
                        item.loading = false;
                        this.expandedKeys.push(item.id);
                    }
                },
                initLoaded ? 0 :100
            )
        }
    })
}

onLoadData:懶加載

onLoadData(treeNode){
    return new Promise(resolve=>{
        setTimeout(()=>{
            treeNode.dataRef.loading = false;
            resolve(this.loadTree(treeNode.dataRef.id,treeNode))
        },10)
    })
}

getUpdateTree:添加一個空數(shù)組,偽造懶加載

getUpdateTree(data){
    data.map(item=>{
        if(存在子節(jié)點){
            item.children = [{}]
        }
    })
}

getAllKey:獲取樹節(jié)點所有的key

getAllKey(data){
    data.map(item=>{
        this.expandedKeys.push(item.id);
        if(item.children){
            this.getAllKey(item.children)
        }
    })
}

onSearch:搜索

onSearch(){
    this.expandedKey = []
    this.searchKeywords = this.searchStr;
    //替換特殊字符
    this.replaceKeywords = this.searchStr.split("\\").join("\\\\");
    this.replaceKeywords = this.replaceKeywords.split("[").join("\\[");
    this.replaceKeywords = this.replaceKeywords.split("]").join("\\]");
    this.replaceKeywords = this.replaceKeywords.split("$").join("\\$");
    this.replaceKeywords = this.replaceKeywords.split("^").join("\\^");
    this.replaceKeywords = this.replaceKeywords.split("*").join("\\*");
    this.replaceKeywords = this.replaceKeywords.split("(").join("\\(");
    this.replaceKeywords = this.replaceKeywords.split(")").join("\\)");
    this.replaceKeywords = this.replaceKeywords.split("+").join("\\+");
    this.replaceKeywords = this.replaceKeywords.split("|").join("\\|");
    this.replaceKeywords = this.replaceKeywords.split("?").join("\\?");
    this.loadTree("","",true)
}

changeExpand:點擊判斷是否異步加載

changeExpand(event,node){
    if(node.node.dataRef.loaded){
        this.expandedKeys = event;
        return;
    }
    node.node.dataRef.loading = true;//添加懶加載效果
    node.node.dataRef.loaded = true;//當點擊時,表示已經(jīng)加載
    this.onLoadData(node.node);
    this.expandedKeys = event
}

以上就是vue與ant-tree結(jié)合偽造懶加載并可以查詢的詳細內(nèi)容,更多關(guān)于vue ant-tree偽造懶加載查詢的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue3.0如何使用computed來獲取vuex里數(shù)據(jù)

    vue3.0如何使用computed來獲取vuex里數(shù)據(jù)

    這篇文章主要介紹了vue3.0如何使用computed來獲取vuex里數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue項目里面引用svg文件并給svg里面的元素賦值

    vue項目里面引用svg文件并給svg里面的元素賦值

    這篇文章主要介紹了vue項目里面引用svg文件并給svg里面的元素賦值,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 解決vue-cli3 使用子目錄部署問題

    解決vue-cli3 使用子目錄部署問題

    這篇文章主要介紹了解決vue-cli3 使用子目錄部署問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • 使用vue3指令封裝一個圖片預(yù)覽功能

    使用vue3指令封裝一個圖片預(yù)覽功能

    這篇文章主要為大家詳細介紹了如何使用?vue3?指令封裝一個后臺管理系統(tǒng)圖片預(yù)覽功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • Vue.js簡易安裝和快速入門(第二課)

    Vue.js簡易安裝和快速入門(第二課)

    這篇文章主要為大家詳細介紹了Vue.js簡易安裝和快速入門的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Vue-router中path的設(shè)置方式

    Vue-router中path的設(shè)置方式

    這篇文章主要介紹了Vue-router中path的設(shè)置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • vue3中vuex與pinia的踩坑筆記記錄

    vue3中vuex與pinia的踩坑筆記記錄

    Vuex是一個專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式,它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化,這篇文章主要給大家介紹了關(guān)于vue3中vuex與pinia踩坑的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • vue中data數(shù)據(jù)之間如何賦值問題

    vue中data數(shù)據(jù)之間如何賦值問題

    這篇文章主要介紹了vue中data數(shù)據(jù)之間如何賦值問題,具有很好的參考價值,希望對大家有所幫助。
    2022-09-09
  • vue中appear的用法

    vue中appear的用法

    這篇文章主要介紹了vue中appear的用法,需要的朋友可以參考下
    2017-08-08
  • vue2.x中$attrs的使用方法教程

    vue2.x中$attrs的使用方法教程

    正常情況下Vue推薦用props向子組件參數(shù),但是在特定場景下,使用$attrs會更方便,下面這篇文章主要給大家介紹了關(guān)于vue2.x中$attrs使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11

最新評論

区。| 临洮县| 黑山县| 北川| 阜南县| 兴文县| 云浮市| 台东市| 永康市| 甘德县| 沾化县| 色达县| 梁山县| 沅江市| 葵青区| 盐亭县| 五台县| 新蔡县| 重庆市| 河西区| 闽侯县| 大连市| 闽清县| 拉萨市| 江孜县| 抚顺县| 崇礼县| 商都县| 淮滨县| 肥城市| 铜鼓县| 团风县| 武汉市| 漳平市| 长海县| 祁东县| 巴林左旗| 乐清市| 宝应县| 阳谷县| 阳山县|