Element Plus - Cascader 观察记录(基本使用、动态加载、动态加载下的异常环境)

Cascader 观察记录

1、基本使用
vue 复制代码
<template>
    <div>
        <el-cascader v-model="value" :options="options" @change="handleChange" />
    </div>
</template>

<script lang="ts">
export default {
    name: "CascaderTest",
};
</script>
<script lang="ts" setup>
const value = ref([]);
const options = ref([
    {
        value: "staff",
        label: "人员信息",
        children: [
            {
                value: "staff1",
                label: "张三",
            },
            {
                value: "staff2",
                label: "李四",
            },
        ],
    },
    {
        value: "task",
        label: "任务信息",
        children: [
            {
                value: "task1",
                label: "任务 1",
            },
            {
                value: "task2",
                label: "任务 2",
            },
        ],
    },
]);
const handleChange = (val) => {
    console.log(val);
};
</script>

<style scoped lang="sass"></style>
  1. 选择 【人员信息 / 张三】 输出结果如下

    Proxy(Array) {0: 'staff', 1: 'staff1'}

  2. 选择 【任务信息 / 任务 1】 输出结果如下

    Proxy(Array) {0: 'task', 1: 'task1'}

2、动态加载
vue 复制代码
<template>
    <div>
        <el-cascader :props="props" />
    </div>
</template>

<script lang="ts">
export default {
    name: "CascaderTest",
};
</script>
<script lang="ts" setup>
const props = {
    lazy: true,
    lazyLoad(node, resolve) {
        const { level } = node;
        
        // 第一层,level 为 0
        if (level === 0) {
            console.log("动态加载第一层");
            resolve([
                {
                    value: "staff",
                    label: "人员信息",
                    leaf: false,
                },
                {
                    value: "task",
                    label: "任务信息",
                    leaf: false,
                },
            ]);
        } else {
            console.log("动态加载第二层");
            setTimeout(() => {
                if (node.value === "staff") {
                    console.log("动态加载人员信息");
                    resolve([
                        {
                            value: "staff1",
                            label: "人员 1",
                            leaf: true,
                        },
                        {
                            value: "staff2",
                            label: "人员 2",
                            leaf: true,
                        },
                    ]);
                } else if (node.value === "task") {
                    console.log("动态加载任务信息");
                    resolve([
                        {
                            value: "task1",
                            label: "任务 1",
                            leaf: true,
                        },
                        {
                            value: "task2",
                            label: "任务 2",
                            leaf: true,
                        },
                    ]);
                }
            }, 1000);
        }
    },
};
const handleChange = (val) => {
    console.log(val);
};
</script>

<style scoped lang="sass"></style>
  1. 打开页面,输出结果如下

    动态加载第一层

  2. 点击 【人员信息】 输出结果如下

    动态加载第二层
    动态加载人员信息

  3. 点击 【任务信息】 输出结果如下

    动态加载第二层
    动态加载任务信息

  4. 再次点击 【人员信息】 输出结果如下

    (无,不会再执行动态加载)

3、动态加载(异常环境)
vue 复制代码
<template>
    <div>
        <el-cascader :props="props" />
    </div>
</template>

<script lang="ts">
export default {
    name: "CascaderTest",
};
</script>
<script lang="ts" setup>
let time = 1;
const props = {
    lazy: true,
    lazyLoad(node, resolve) {
        const { level } = node;

        // 第一层,level 为 0
        if (level === 0) {
            console.log("动态加载第一层");
            resolve([
                {
                    value: "staff",
                    label: "人员信息",
                    leaf: false,
                },
                {
                    value: "task",
                    label: "任务信息",
                    leaf: false,
                },
            ]);
        } else {
            console.log("动态加载第二层");
            setTimeout(() => {
                if (node.value === "staff") {
                    console.log("动态加载人员信息");
                    if (time < 3) {
                        console.log("模拟发生异常");
                        time++;
                        resolve([]);
                    } else {
                        resolve([
                            {
                                value: "staff1",
                                label: "人员 1",
                                leaf: true,
                            },
                            {
                                value: "staff2",
                                label: "人员 2",
                                leaf: true,
                            },
                        ]);
                    }
                } else if (node.value === "task") {
                    console.log("动态加载任务信息");
                    resolve([
                        {
                            value: "task1",
                            label: "任务 1",
                            leaf: true,
                        },
                        {
                            value: "task2",
                            label: "任务 2",
                            leaf: true,
                        },
                    ]);
                }
            }, 1000);
        }
    },
};
const handleChange = (val) => {
    console.log(val);
};
</script>

<style scoped lang="sass"></style>
  1. 打开页面,输出结果如下

    动态加载第一层

  2. 点击 【人员信息】 输出结果如下

    动态加载第二层
    动态加载人员信息
    模拟发生异常

  3. 再次点击 【人员信息】 输出结果如下

    (无,不会再执行动态加载)

4、补充
复制代码
* 在第一层时

1. 使用 resolve(); 时:点击下拉按钮,出现内容块(加载中)

2. 使用 resolve([]); 时:点击下拉按钮,出现内容块(暂无数据)

* 在第二层时

1. 使用 resolve(); 时:第一次点击 【一级选项】 时,不会出现新的侧边内容块;第二次点击 【一级选项】 时,才会出现新的侧边内容块(暂无数据)

2. 使用 resolve([]); 时:第一次点击 【一级选项】 时,就会出现新的侧边内容块(赞数数据)
```
相关推荐
萌新小码农‍12 小时前
python装饰器
开发语言·前端·python
KK溜了溜了12 小时前
Python从入门到精通
服务器·开发语言·python
故事和你9112 小时前
洛谷-【图论2-1】树5
开发语言·数据结构·c++·算法·动态规划·图论
threelab12 小时前
Three.js 初中数学函数可视化 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
爱学习的程序媛12 小时前
浏览器工作原理全景解析
前端·浏览器·web
xiaoshuaishuai812 小时前
C# CDN加速与离线包优化PowerSetting慢问题
开发语言·windows·spring·c#
凉辰13 小时前
解决 H5 键盘遮挡与页面上推
开发语言·javascript·计算机外设
计算机安禾13 小时前
【c++面向对象编程】第25篇:仿函数(函数对象):重载operator()
开发语言·c++·算法
Rust语言中文社区13 小时前
【Rust日报】2026-05-14 Pyrefly v1.0 正式发布:快速的 Python 类型检查器和语言服务器
开发语言·后端·python·rust
我是若尘13 小时前
用 Git Worktree 同时开多个需求,不用来回 stash
前端