el-table点击某一行高亮并显示小圆点的实现代码

为了实现“el-table点击某一行高亮并显示小圆点”的效果,我们可以使用Vue的指令和事件等相关机制来实现:

1. 安装element-ui

在开始之前,我们需要先安装并引入element-ui库,可以通过npm或者yarn来进行安装:

# 使用npm进行安装
npm install element-ui --save

# 使用yarn进行安装
yarn add element-ui

接着,在项目入口处(一般是main.js文件)引入element-ui的CSS和JS:

// main.js

import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);

安装并引入成功后,我们就可以开始实现“el-table点击某一行高亮并显示小圆点”的效果:

2. 编写模板代码

首先,我们需要创建一个表格组件,并在数据列表tableData中添加一列isActive,该列用于标记该行当前是否处于激活状态。

<template>
  <el-table :data="tableData" highlight-row>
    <el-table-column label="日期" prop="date"></el-table-column>
    <el-table-column label="姓名" prop="name"></el-table-column>
    <el-table-column label="地址" prop="address"></el-table-column>
    <el-table-column label="操作">
      <template slot-scope="scope">
        <el-button @click.prevent.stop="handleClick(scope.$index, scope.row.isActive)">点击</el-button>
        <el-tooltip :open-delay="800" content="i am tooltip" placement="top">
          <i :class="{'el-icon-circle-check': scope.row.isActive}"></i>
        </el-tooltip>
      </template>
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { date: '2021-01-01', name: '张三', address: '北京市', isActive: false },
        { date: '2021-01-02', name: '李四', address: '上海市', isActive: false },
        { date: '2021-01-03', name: '王五', address: '广州市', isActive: false },
        { date: '2021-01-04', name: '赵六', address: '深圳市', isActive: false },
      ],
      activeIndex: null,
    };
  },
  methods: {
    handleClick(index, isActive) {
      // 如果该行已被激活,则取消激活状态;否则激活该行。
      this.tableData[index].isActive = !isActive;
      this.activeIndex = isActive ? null : index;
    },
  },
};
</script>

在上述代码中,我们使用了highlight-row指令来实现点击行高亮的效果;每一行都会渲染一个el-button组件和一个el-tooltip组件,用于触发handleClick方法并显示小圆点。

handleClick方法用于处理行的激活状态,每次点击时都会切换该行的激活状态,并记录激活行的索引值activeIndex

接下来,我们需要为激活的行添加样式,以便实现高亮的效果:

.table-highlight .el-table__body > tbody > tr.active-row td {
  background-color: #f5f7fa;
}

最后,在表格的根元素上添加.table-highlight类名,并给每一行绑定一个active-row样式类,我们就可以实现“el-table点击某一行高亮并显示小圆点”的效果了:

<template>
  <div class="table-highlight">
    <el-table :data="tableData" highlight-row>
      <el-table-column label="日期" prop="date"></el-table-column>
      <el-table-column label="姓名" prop="name"></el-table-column>
      <el-table-column label="地址" prop="address"></el-table-column>
      <el-table-column label="操作">
        <template slot-scope="scope">
          <el-button @click.prevent.stop="handleClick(scope.$index, scope.row.isActive)">点击</el-button>
          <el-tooltip :open-delay="800" content="i am tooltip" placement="top">
            <i :class="{'el-icon-circle-check': scope.row.isActive}"></i>
          </el-tooltip>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { date: '2021-01-01', name: '张三', address: '北京市', isActive: false },
        { date: '2021-01-02', name: '李四', address: '上海市', isActive: false },
        { date: '2021-01-03', name: '王五', address: '广州市', isActive: false },
        { date: '2021-01-04', name: '赵六', address: '深圳市', isActive: false },
      ],
      activeIndex: null,
    };
  },
  methods: {
    handleClick(index, isActive) {
      // 如果该行已被激活,则取消激活状态;否则激活该行。
      this.tableData[index].isActive = !isActive;
      this.activeIndex = isActive ? null : index;
    },
  },
};
</script>

<style scoped>
.table-highlight .el-table__body > tbody > tr.active-row td {
  background-color: #f5f7fa;
}
.active-row {
  cursor: pointer;
}
</style>

下面是另一个示例,使用vue.js+element-ui+vue-router4.x开发一个有主从数据关系的菜单管理系统:

<template>
  <div class="menu-manage" :style="{ width: $device.isDesktop ? 'calc(100% - 200px)' : '100%' }">
    <!-- 左侧菜单目录 -->
    <el-menu
      :default-active="$router.currentRoute.path"
      @select="$router.push"
      router
      background-color="#fff"
      text-color="#333"
      :collapse="$device.isDesktop ? $route.meta.collapse : false"
      :unique-opened="$device.isDesktop"
      :default-openeds="$route.matched.length > 2 ? ['/' + $route.matched.slice(2).map(item => item.path).join('/')] : []"
      class="menu-manage-left">
      <template v-if="$device.isDesktop">
        <el-menu-item
          v-for="menu in menus"
          :index="menu.path"
          :key="menu.id"
          :class="[menu.children && menu.children.length ? 'menu-manage-left-item-haschild' : '']">
          <i :class="menu.icon"></i>
          <span v-text="menu.name"></span>
        </el-menu-item>
      </template>
      <template v-else>
        <el-cascader-panel v-model="cascaderValue" :options="options"></el-cascader-panel>
      </template>
    </el-menu>
    <!-- 右侧主要内容 -->
    <div class="menu-manage-right">
      <keep-alive>
        <router-view />
      </keep-alive>
    </div>
  </div>
</template>

<script>
import { ElMenu, ElMenuItem, ElSubmenu, ElCascaderPanel } from 'element-plus';
import { getMenuList } from '@/api/user';

export default {
  name: 'MenuManage',
  components: {
    [ElMenu.name]: ElMenu,
    [ElMenuItem.name]: ElMenuItem,
    [ElSubmenu.name]: ElSubmenu,
    [ElCascaderPanel.name]: ElCascaderPanel,
  },
  data() {
    return {
      menus: [],
      cascaderValue: [],
      options: [],
    };
  },
  mounted() {
    this.initMenuList();
  },
  computed: {
    deviceType() {
      return this.$device.type;
    },
  },
  watch: {
    cascaderValue: {
      handler(newVal) {
        const path = newVal.map(item => item.path).join('/');
        this.$router.push(`/${path}`);
      },
      deep: true,
    },
  },
  methods: {
    async initMenuList() {
      try {
        const result = await getMenuList();
        this.menus = this.buildMenuTree(result.data);
        this.buildCascaderOptions(this.menus);
      } catch (error) {
        this.$message.error(error.message || '菜单列表数据获取失败!');
      }
    },
    buildMenuTree(data) {
      // TODO: 将列表数据构造成树形结构
    },
    buildCascaderOptions(data) {
      // TODO: 将树形结构的菜单数据构造成ElCascaderPanel组件的选项数据
    },
  },
};
</script>

<style scoped lang="scss">
.menu-manage {
  height: 100%;

  .menu-manage-left {
    height: 100%;
    overflow-y: auto;

    .menu-manage-left-item-haschild.is-active {
      background-color: #f0f2f5;

      > i,
      > span {
        color: #409eff;
      }
    }
  }

  .menu-manage-right {
    height: calc(100% - 50px);
    padding: 20px;
  }
}
</style>

在上面的示例代码中,我们使用element-uiElMenu组件作为左侧的菜单目录;通过router选项实现路由的跳转,使用@select事件监听菜单项的激活状态并进行路由的跳转;在手机端通过ElCascaderPanel组件来渲染菜单目录,并使用watch监听cascaderValue数组的变化,通过$router.push方法实现路由的跳转。

此外,我们还使用了组件的混入选项$device,根据设备类型动态设置菜单的折叠和开启状态、右侧宽度,并使用keep-alive组件缓存已加载的页面。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:el-table点击某一行高亮并显示小圆点的实现代码 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS3绘制圆角矩形的简单示例

    下面是“CSS3绘制圆角矩形的简单示例”的完整攻略。 简介 圆角矩形是一个常见的UI元素,用于清晰、简单地组织元素和定义边框。使用CSS3,我们可以轻松地在网页中绘制圆角矩形。 实现方法 CSS3提供了一个属性border-radius,该属性允许我们将矩形的四个角变成圆形。该属性接受一个值或两个值,分别表示不同轴向的半径。下面是实现一个具有圆角的矩形示例代…

    css 2023年6月10日
    00
  • 使用Vue制作图片轮播组件思路详解

    这里我可以给出使用Vue制作图片轮播组件的详细攻略: 思路概述 实现图片轮播组件的主要思路如下: 确定组件的基本结构和样式 定义轮播动画效果和过渡方式 通过Vue组件化思想,定义图片轮播组件 将组件引入主页面并使用 组件结构和样式设计 在组件设计中,我们可以定义一个父容器元素,内部包含图片、左右箭头和指示器。具体结构和样式可以参考以下代码: <temp…

    css 2023年6月10日
    00
  • 用ASP.NET实现下载远程图片保存到本地的方法 保存抓取远程图片的方法

    ASP.NET 实现下载远程图片保存到本地的方法 有时候我们需要将远程的图片保存到本地,那么该怎么做呢?下面我们将介绍如何用 ASP.NET 实现下载远程图片并保存到本地的方法。 步骤1:获取远程图片的URL 由于我们需要下载远程图片,所以首先需要获取远程图片的 URL。可以通过爬虫等方式获取,也可以手动输入 URL。 步骤2:下载远程图片 下载远程图片可以…

    css 2023年6月11日
    00
  • 让CSS代码更具有易维护性

    当我们的CSS样式文件变得越来越大时,维护代码就会变得越来越困难。因此,在编写CSS时,考虑代码的可维护性就显得非常重要。下面是让CSS代码更具有易维护性的完整攻略: 1. 方便选取、易于理解的类名 当编写CSS类名时,我们应该选择一些名称容易理解的词语,而不是只是简单的描述。比如,不要只是使用“yellow”或“big”这样的单词,要考虑使用更明确的类名,…

    css 2023年6月9日
    00
  • jQuery修改class属性和CSS样式整理

    下面我来详细讲解一下“jQuery修改class属性和CSS样式整理”的完整攻略: 修改class属性 addClass()方法 我们可以通过addClass()方法给一个元素添加一个或多个class属性,示例代码如下: $(‘h1’).addClass(‘title big’); 上述代码就给所有<h1>标签添加了title和big两个clas…

    css 2023年6月10日
    00
  • html form表单基础入门案例讲解

    首先我会介绍form表单的基本概念和结构,然后会提供两个案例并详细讲解。 HTML form表单基础入门 form表单基本概念 HTML中的form表单是一种用于向服务器提交数据的元素,其包含了用户输入的各种数据,如文本、密码、单选框、多选框、下拉框等。form表单的结构如下: <form action="服务器端处理地址" met…

    css 2023年6月9日
    00
  • css中url的路径含义及使用

    下面是CSS中url路径含义及使用的完整攻略: CSS中URL路径的含义 在CSS中,URL是一个重要的概念,它的主要作用是用来引用各种资源文件,如图片、字体等。URL的全称是Uniform Resource Locator,翻译成中文就是统一资源定位符。在CSS中,URL通常被用于以下几个地方: 引入背景图片 引入图标、字体等 引入其他资源,如视频、音频等…

    css 2023年6月9日
    00
  • Vue中使用vue2-perfect-scrollbar制作滚动条

    Vue2-perfect-scrollbar是一个基于Vue框架的实现滚动条的插件。下面是使用Vue2-perfect-scrollbar制作滚动条的完整攻略: 1. 安装 首先需要安装Vue2-perfect-scrollbar插件。执行以下命令: npm install vue2-perfect-scrollbar –save 2. 使用 在Vue组件…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部