EleTree组件异步加载实现

4 篇文章 0 订阅
3 篇文章 0 订阅

EleTree组件异步加载实现

div id="test1" lay-filter="data1"></div>
<script>
layui.config({
    base: "/static/layuiadmin/modules/"
	}).use('eleTree', function(){
    var $ = layui.$;        
    var eleTree = layui.eleTree;        
    var el;        
    var rootId=0;                
    //渲染        
    el=eleTree.render({                    
        elem: '#test1'                    
        ,url:"/item/cat/list/"+rootId                    
        ,type:'get'                    
        ,id: 'demoId1'                    
        ,showLine:true                    
        ,showCheckbox: true        
    });        
    // 节点点击事件        
    eleTree.on("nodeClick(data1)",function(d) {            
        $.ajax({                
            url:"/item/cat/list/"+d.data.currentData.id,                
            type:'get',                
            success:function (result) {                    
                var nodes = result.data;                    
                for(var i=0;i<nodes.length;i++){                        
                    var node=JSON.parse(JSON.stringify(nodes[i]));//不加这个会出现找不到ID属性的问题?                        
                    el.append(d.data.currentData.id,node);                    }                    //测试数据                    
                // {                    
                //     id: 1,                    
                //         label: "安徽省",                    
                //     children: []                    
                // }                    
                // console.log(d.data);    
                // 点击节点对应的数据                    
                // console.log(d.event);   
                // event对象                    
                // console.log(d.node);    
                // 点击的dom节点                    
                // console.log(this);      // 与d.node相同                
            }            
        });        
    })    
});
</script>

优化版

el=eleTree.render({
                    elem: '#test1'
                    ,url:"/content/find/"+rootId
                    ,type:'get'
                    ,id: 'demoId1'
                    ,lazy: true
                    ,showLine:true
                    ,accordion:false
                    ,checkStrictly: true
                    ,highlightCurrent:true
                    ,defaultExpandAll: true
                    ,contextmenuList: ["add.async","edit","remove"]
                    ,load:function (oldNode,callback) {
                $.ajax({
                    url: "/content/find/" + oldNode.id,
                    type: 'get',
                    success: function (result) {
                        var newNode = result.data;
                        setTimeout(function () {
                            callback(newNode);
                        }, 100);
                    }
                });
            }
        });


在 Vue 中实现树形组件异步加载,可以使用递归组件异步加载数据的方式实现。一般来说,树形组件的数据都是嵌套的,每个节点有自己的子节点。当节点很多的时候,需要采取异步加载的方式,将一部分节点延迟加载。下面是具体实现步骤: 1. 创建树形组件:首先需要创建一个树形组件,该组件中包含了递归组件的方式,即组件中会嵌套自身。 2. 设置异步加载方法:在树形组件中设置一个异步加载方法,该方法接收节点的 ID 作为参数,然后根据节点 ID 加载子节点数据。 3. 设置递归组件:在树形组件中设置一个递归组件,用于逐层展示树形节点。在递归组件中,需要设置一个条件,用于判断当前节点是否需要延迟加载子节点。如果需要延迟加载,则在节点展开时调用异步加载方法加载子节点数据。 4. 渲染树形组件:最后,在父组件中渲染树形组件,并传入顶层节点的数据。 下面是示例代码: ``` <template> <div> <ul> <tree-node v-for="node in nodes" :key="node.id" :node="node"></tree-node> </ul> </div> </template> <script> import TreeNode from './TreeNode.vue' export default { components: { TreeNode }, data () { return { nodes: [] } }, mounted () { this.loadRootNodes() }, methods: { loadRootNodes () { // 加载顶层节点数据 // ... this.nodes = rootNodeData } } } </script> ``` ``` <template> <li> <div @click="toggle"> {{ node.label }} </div> <ul v-if="!isLeaf && expanded"> <tree-node v-for="childNode in childNodes" :key="childNode.id" :node="childNode"></tree-node> </ul> </li> </template> <script> export default { props: { node: { type: Object, required: true } }, data () { return { childNodes: null, expanded: false } }, computed: { isLeaf () { return !this.node.hasChild } }, methods: { toggle () { if (this.isLeaf) { return } if (!this.childNodes) { this.loadChildNodes() } this.expanded = !this.expanded }, async loadChildNodes () { // 加载子节点数据 // ... this.childNodes = childNodeData } } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值