惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
G
Google Developers Blog
D
Docker
The GitHub Blog
The GitHub Blog
H
Help Net Security
WordPress大学
WordPress大学
博客园_首页
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
罗磊的独立博客
I
InfoQ
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
Jina AI
Jina AI
J
Java Code Geeks
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News

博客园 - Zion0707

Codex接入DeepSeek token实现对话与操作,so easy! Openclaw只能聊天不能操作解决方案 Ubuntu从零搭建Openclaw Openclaw安装问题记录 React数字滚动,增加或减少效果 react hooks实现对元素拖拽及鼠标滚轮缩放 前端实现图片文字识别并提取 ECharts实现两条曲线数据比较,数据高出区域高亮显示 canvas实现视频播放并支持自动播放 fabricjs实现虚线流动动画效果 React国际化方案及示例 fabricjs如何导入echarts fabricjs元素对齐方式实现 萤石云视频监控和回放方案 React仿photoshop参考线功能 react-router-dom v6 使用 “DatePicker”不能用作 JSX 组件。 16进制相关操作方法 js 版 AES-128 算法加解密 js 版 React 下拉多选,全选/全不选功能组件
Element plus的tree组件实现单选和搜索功能
Zion0707 · 2021-11-19 · via 博客园 - Zion0707
<!-- element plus 树组件实现单选及搜索功能 -->
<template>
    <div class="tree-radio">
        <h3>Element plus 树组件实现单选及搜索功能</h3>
        <hr />
        <el-input
            type="text"
            v-model="filterText"
            placeholder="请输入搜索内容"
        />
        <hr />
        <div class="tree">
            <el-tree
                :data="treeData"
                :props="{
                    label: 'label',
                    children: 'children',
                    class: customNodeClass,
                }"
                node-key="id"
                ref="treeForm"
                show-checkbox
                check-strictly
                default-expand-all
                :filter-node-method="filterNode"
                @check-change="handleCheckChange"
            />
        </div>
        <hr />
        <el-button type="primary" @click="getCheckedTree"
            >获取选中的节点</el-button
        >
    </div>
</template>

<script>
// 给节点添加class
const customNodeClass = (data) => {
    if (data.isPenultimate) {
        return 'no-checkbox-node';
    }
    return null;
};

export default {
    name: 'tree-radio',
    data() {
        return {
            customNodeClass,
            filterText: '',
            checkedId: '',
            treeData: [
                {
                    id: '1',
                    label: '标签1',
                    isPenultimate: true,
                    children: [
                        {
                            id: '1-1',
                            label: '标签1-1',
                        },
                        {
                            id: '1-2',
                            label: '标签1-2',
                        },
                    ],
                },
                {
                    id: '2',
                    label: '标签2',
                    isPenultimate: true,
                    children: [
                        {
                            id: '2-1',
                            label: '标签2-1',
                            isPenultimate: true,
                            children: [
                                {
                                    id: '2-1-1',
                                    label: '标签2-1-1',
                                },
                                {
                                    id: '2-1-2',
                                    label: '标签2-1-2',
                                },
                            ],
                        },
                        {
                            id: '2-2',
                            label: '标签2-2',
                            isPenultimate: true,
                            children: [
                                {
                                    id: '2-2-1',
                                    label: '标签2-2-1',
                                },
                                {
                                    id: '2-2-2',
                                    label: '标签2-2-2',
                                },
                            ],
                        },
                    ],
                },
            ],
        };
    },
    watch: {
        // 过滤操作
        filterText(val) {
            this.$refs.treeForm.filter(val);
        },
    },
    methods: {
        // 过滤节点
        filterNode(value, data) {
            if (!value) return true;
            return data.label.indexOf(value) !== -1;
        },
        // 单选操作
        handleCheckChange(data, checked) {
            if (checked) {
                this.checkedId = data.id;
                this.$refs.treeForm.setCheckedKeys([data.id]);
            } else {
                if (this.checkedId === data.id) {
                    this.$refs.treeForm.setCheckedKeys([data.id]);
                }
            }
        },
        // 获取单选选中的结果
        getCheckedTree() {
            alert(`当前选中的节点为:${this.checkedId}`);
        },
    },
};
</script>

<style lang="less">
// 样式重置,记得把 scoped 属性去掉才能生效
.tree-radio {
    border: 1px solid #ddd;
    padding: 20px;
    border-radius: 5px;
    h3 {
        font-weight: 300;
        color: #ff9b61;
        font-size: 18px;
    }
    width: 500px;
    margin: 100px auto;
    .no-checkbox-node {
        & > .el-tree-node__content {
            .el-checkbox {
                display: none;
            }
        }
    }
    .el-checkbox__inner {
        border-radius: 50%;
    }
}
</style>