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([]); 时:第一次点击 【一级选项】 时,就会出现新的侧边内容块(赞数数据)
```
相关推荐
\xin3 小时前
pikachu自编exp,xss反射性get,post,存储型xss,dom,dom-x
前端·javascript·xss
2501_933329557 小时前
媒介宣发技术实践:Infoseek舆情系统的AI中台架构与应用解析
开发语言·人工智能·架构·数据库开发
是烟花哈7 小时前
【前端】React框架学习
前端·学习·react.js
[J] 一坚7 小时前
嵌入式高手C
c语言·开发语言·stm32·单片机·mcu·51单片机·iot
odoo中国7 小时前
Odoo 19技术教程 : 如何在 Odoo 19 中创建 Many2one 组件
开发语言·odoo·odoo19·odoo技术·many2one
逻辑驱动的ken8 小时前
Java高频面试考点场景题14
java·开发语言·深度学习·面试·职场和发展·求职招聘·春招
qq4356947018 小时前
JavaWeb08
前端
2401_878454539 小时前
html和css的复习(1)
前端·css·html
techdashen9 小时前
Cloudflare 如何把一个大型代理拆成三个小服务来提升可靠性
开发语言·rust
geovindu9 小时前
go: Chain of Responsibility Pattern
开发语言·设计模式·golang·责任链模式