Vue+ElementPlus的一些问题修复汇总

news/2025/2/26 13:50:33

目录

一、ElementPlus+Vue-router做侧边栏问题

二、 组件样式问题

2.1修改文字颜色、大小、粗细、边框的颜色

2.2修改聚焦后文字的颜色、边框的颜色

2.3修改鼠标悬浮时文字的颜色、边框的颜色

三、 组件样式问题

3.1修改文字颜色、大小、粗细

四、 样式问题

4.1当数据为空时的提示词

4.2修改列表标题样式

一、ElementPlus+Vue-router做侧边栏问题

在使用ElementPlus中的<el-menu>组件做侧边栏时,鼠标点击某个选项后,跳转到新的页面,同时对应的侧边栏应该高亮显示,如下图所示:

点击“测试1”后,“测试1”高亮变蓝色,同时控制router跳转新的页面,具体区域由下图绿色区域所示:

但是由于<el-menu>依靠index来确定当前选定的标签,因此当我们“刷新返回\前进一页”时,会出现高亮标签变成你所设置的default-active标签

这个时候我们需要根据URL的变化,来重置选中标签

具体思路

  1. router配置中,每一个路由除指定path外,还要指定name
  2. <el-menu-item>中的index应是需要跳转到页面的路由name
  3. 使用onMounted(),当组件被挂载时(页面刷新),检测当前URL,确定被选中的标签实现高亮
  4. 使用watch()监测URL的变化,当URL发生变化时(前进/后退),确定被选中的标签实现高亮

router.js配置:

javascript">import { createRouter, createWebHistory } from "vue-router";

const routes = [
    {
        path: "/",
        redirect:{
            name: "page1"
        }
    },
    {
        path: "/page1",
        name: "page1",
    },
    {
        path: "/page2",
        name: "page2",
    },
    {
        path: "/page3",
        name: "page3",
    },
];

const router = createRouter({
    history: createWebHistory(),
    routes,
});

export default router;

App.vue配置:

javascript"><script setup>
import { ref,onMounted,watch } from 'vue'
import { useRouter,useRoute } from 'vue-router'

//创建选中菜单索引
const activeIndex = ref('page1')
//创建路由对象
const router = useRouter()
//创建路由参数对象
const route = useRoute()

//监听路由变化
watch(() => route.path,(newPath) => {
    activeIndex.value = newPath.split('/')[1]
    console.log(activeIndex.value)
})

// 页面加载完成后,设置选中菜单索引
onMounted(() => {
    activeIndex.value = route.path.split('/')[1]
})

// 菜单点击事件
function handleSelect(index) {
    router.push({
        name: index
    })
}
</script>

<template>
    <el-container>
        <el-aside style="padding: 0px;width: auto;">
            <el-menu :default-active="activeIndex" @select="handleSelect" class="init" mode="vertical" >
                <el-menu-item index="page1">测试1</el-menu-item>
                <el-menu-item index="page2">测试2</el-menu-item>
                <el-menu-item index="page3">测试3</el-menu-item>
            </el-menu>
        </el-aside>
        <el-main style="padding: 0px;">
            <div class="test-div">
                <router-view></router-view>
            </div>
        </el-main>
    </el-container>
</template>

<style scoped>
    .init {
        width: 200px;
        height: 100vh;
    }
    .test-div {
        height: 100vh;
        background-color: aquamarine;
    }
</style>

缺点:

  1. route路由的pathname必须一致
  2. 当参数结构复杂,存在多个定界符“/”时,对应的split索引也会改变

另一种解决思路:

使用Vuex存储当前选中页面的索引,可以完美解决上述缺点

二、<el-input>组件样式问题

使用ElementPlus最大的好处就是方便,最大的坏处就是想要定制化就比较麻烦

因为封装的问题,所以修改样式一直是一件麻烦的事情

注意:以下所有样式均是在<style scoped>局部作用域中实现,而在全局作用域中实现不具备唯一性,故不实现

同时,所有实现基于Vue3语法

2.1修改文字颜色、大小、粗细、边框的颜色

:deep(.el-input__inner){
    color:red;
    font-size: 20px;
    font-weight: bold;
}
/* 边框颜色其实是box-shadow实现的 */
:deep(.el-input__wrapper){
    box-shadow: 0 0 0 1px red inset;
}

效果:

2.2修改聚焦后文字的颜色、边框的颜色

:deep(.el-input__inner:focus){
    color: blue;
}
/* 边框颜色其实是box-shadow实现的 */
:deep(.el-input__wrapper.is-focus){
    box-shadow: 0 0 0 1px green inset;
}

效果:

2.3修改鼠标悬浮时文字的颜色、边框的颜色

:deep(.el-input__inner:hover){
    color: green;
}
:deep(.el-input__wrapper:hover){
    box-shadow: 0 0 0 1px blue inset;
}

效果:

三、<el-menu>组件样式问题

注意:以下所有样式均是在<style scoped>局部作用域中实现,而在全局作用域中实现不具备唯一性,故不实现

同时,所有实现基于Vue3语法

3.1修改文字颜色、大小、粗细

/* 修改默认样式 */
.el-menu-item {
    color:red;
    font-size: 20px;
    font-weight: bold;
    background-color: black;  
}
/* 修改悬浮时样式 */
.el-menu-item:hover {
    color: white;
    background-color: cadetblue;
}
/* 修改选中时样式 */
.el-menu-item.is-active {
    color: green;
    background-color: red;
}

效果:

四、<el-table>样式问题

注意:以下所有样式均是在<style scoped>局部作用域中实现,而在全局作用域中实现不具备唯一性,故不实现

同时,所有实现基于Vue3语法

4.1当数据为空时的提示词

在默认情况下,如果数据为空,<el-table>会默认渲染:“No Data”提示词,用来表示没有数据。

但如果想要修改这个提示词,可以使用官方提供的“empty-text”属性修改:

<el-table empty-text="暂无数据">
    <el-table-column label="测试1"></el-table-column>
    <el-table-column label="测试2"></el-table-column>
    <el-table-column label="测试3"></el-table-column>
    <el-table-column label="测试4"></el-table-column>
</el-table>

效果:

4.2修改列表标题样式

/* 修改标题头文字样式 */
:deep(.el-table__header thead) {
    color: black;
    font-size: 20px;
    font-weight: bold;
}
/* 修改标题文字水平居中 */
:deep(thead .cell) {
    text-align: center;
}

效果:


http://www.niftyadmin.cn/n/5868795.html

相关文章

【数据结构】(Python)第六章:图

数据结构&#xff08;Python&#xff09;第六章&#xff1a;图 文章目录 数据结构&#xff08;Python&#xff09;第六章&#xff1a;图6.1 图的定义和基本概念6.2 图的存储结构6.2.1 邻接矩阵&#xff08;Adjacency Matrix&#xff09;6.2.2 邻接表&#xff08;Adjacency List…

特辣的海藻!4

目录 基础知识点 数对结构 BigInteger split() 题 1.商品库存管理 - 蓝桥云课 2.回文字符串 - 蓝桥云课 3.握手问题 - 蓝桥云课 基础知识点 数对结构 Java中类似C大的pair&#xff0c;自定义 public class Pair<A, B> {private final A first;private final B …

Imagination 最新的D系列GPU IP 为智能手机和其他电力受限设备上图形和计算工作负载的高效加速设定了新的标准

今日&#xff0c;Imagination Technologies&#xff08;“Imagination”&#xff09;宣布推出其最新的GPU IP——Imagination DXTP&#xff0c;该产品为智能手机和其他电力受限设备上图形和计算工作负载的高效加速设定了新的标准。得益于一系列微架构改进&#xff0c;DXTP在常见…

Android构建系统 - 02 初始化编译环境,添加产品

文章目录 初始化编译环境&#xff0c;选择产品envsetup.sh脚本不开启 subshell作用提供实用函数添加编译选项查找/执行 其它vendorsetup.sh lunch ProductProduct 概念编译选项解析层级配置文件目录AOSP 预制芯片及方案厂商 lunch命令作用编译目标BUILD 编译目标BUILDTYPE 编译…

React + TypeScript 复杂布局开发实战

React TypeScript 复杂布局开发实战 一、项目架构设计&#xff08;基于最新技术栈&#xff09; 1.1 技术选型与工程创建 # 使用Vite 5.x React 19 TypeScript 5.4 npx create-vitelatest power-designer-ui --template react-ts cd power-designer-ui && npm inst…

Python代码片段-断点任务

使用Python处理一堆长耗时任务的时候&#xff0c;为了防止异常退出程序或者手动退出程序后丢失任务进度&#xff0c;可用使用断点的方式记录任务进度&#xff0c;下次重载任务后&#xff0c;继续运行上次未完成的任务即可。 这里用json文件作为数据持久化的方式&#xff0c;免…

YOLOv10 解析与地平线 征程 6 模型量化

一&#xff0c;YOLOv10 解析 1.简介 近些年来&#xff0c;研究人员对 YOLO 的架构设计、优化目标、数据增强策略等进行了探索&#xff0c;取得了显著进展。然而&#xff0c;后处理对非极大值抑制&#xff08;NMS&#xff09;的依赖阻碍了 YOLO 的端到端部署&#xff0c;并对推…

一个std::async的示例

目录 一、问题引出 二、关键点解释 1.生成随机数 2.异步启动两个操作 3.检查异步任务是否为延迟执行并轮询任务状态 4.等待所有任务完成并处理异常 三、总结 一、问题引出 从《c标准库》&#xff08;第2版&#xff09;看到一个std::async的例子。演示了使用 std::async…