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([]); 时:第一次点击 【一级选项】 时,就会出现新的侧边内容块(赞数数据)
```
相关推荐
EthanChou20201 小时前
AES67协议笔记
前端·笔记·es6
马优晨1 小时前
pom.xml 中 jquery webjars 依赖解释
xml·前端·jquery·jquery webjars·webjars依赖
呆呆敲代码的小Y1 小时前
【游戏开发】C# 中的迭代器
java·开发语言·c#·迭代器
benchmark_cc1 小时前
K 线数据断层会对回测造成什么影响?从一个缺失交易日看懂量化策略为什么会失真
大数据·开发语言·数据分析·量化·股票数据·quantdash·量化数据源
benchmark_cc1 小时前
数据 API 稳定性为什么会影响量化策略?从数据获取到信号执行的完整分析
开发语言·python·数据分析·量化·股票数据·quantdash·量化数据源
简单Janeee1 小时前
[Vue 3 从零到上线]-第九篇:更美更强——引入 UI 库与网络请求 (Axios)
网络·vue.js·ui
小蒜学长1 小时前
基于SpringBoot + Vue的智能健身房管理系统的设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
里欧跑得慢1 小时前
AI 驱动的 UI 国际化方案自动适配:从单一语言到多语言布局的智能转换
前端·css·flutter·web
DolitD1 小时前
云流技术深度剖析:单服务器下如何实现3D应用的多实例并发?
java·服务器·前端·3d·云原生·云计算
2601_962180331 小时前
python——Django 框架
开发语言·python·django