2 个回答

这是官方例子中的代码,给你写个注释。

loadNode(node, resolve) {
    // level = 0 的时候是根节点,直接给了个固定值 region
    if (node.level === 0) {
        return resolve([{ name: "region" }]);
    }
    // level > 1 的时候不处理,返回空数组表示没有子节点
    if (node.level > 1) return resolve([]);

    // 用 setTimeout 模拟异步加载
    setTimeout(() => {
        // 假设异步从服务器得到了这个数据
        const data = [
            { name: "leaf", leaf: true },
            { name: "zone" }
        ];

        // 把它作为子节点 resolve,给控件加载成子节点
        resolve(data);
    }, 500);
}

再给你补一段示例,在上面的函数中加的

loadNode(node, resolve) {
    console.log("node", node);
    // level = 0 的时候是根节点,直接给了个固定值 region
    if (node.level === 0) {
        return resolve([{ name: "region" }]);
    }

    // (by James) 给你补个示例,再加载一层,还是用 setTimeout 来模拟异步
    if (node.data.name === "zone") {
        setTimeout(() => {
            resolve([
                { name: "上海", leaf: true },
                { name: "北京", leaf: true },
                { name: "南京", leaf: true },
                { name: "杭州", leaf: true },
            ]);
        }, 500);
        return;  // 别忘了这个
    }

    // level > 1 的时候不处理,返回空数组表示没有子节点
    if (node.level > 1) return resolve([]);

    // 用 setTimeout 模拟异步加载
    setTimeout(() => {
        // 假设异步从服务器得到了这个数据
        const data = [
            { name: "leaf", leaf: true },
            { name: "zone" }
        ];

        // 把它作为子节点 resolve,给控件加载成子节点
        resolve(data);
    }, 500);
}

https://codepen.io/jamesfancy...

captured-2.gif


已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏