在elementUI的表格(table)内嵌入svg图标

news2024/11/22 18:52:44

参考文档:

https://element.eleme.cn/#/zh-CN/component/table

demo效果图如下(在表格的类型列中添加一个对应类型的svg图标):
在这里插入图片描述

本文主要关注以下两点:

  1. elementUI的表格(table)的自定义列模版
  2. 在vue工程中动态引入svg图片

demo源码

MyTable.vue(上述两个主要关注点均包含在此文件)代码如下:

<!--
 * @Author: liqing
 * @Date: 2023-08-08 14:35:39
 * @LastEditors: liqing
 * @LastEditTime: 2023-08-09 10:11:46
 * @Description: description
-->
<template>
    <el-table :data="tableData">
      <el-table-column
        prop="name"
        label="姓名"
        width="100">
      </el-table-column>
      <el-table-column
        prop="type"
        label="类型"
        width="100">
        <template slot-scope="scope">
          <div style="display: flex; flex-direction: row;">
            <svg style="width: 20px; height: 20px;">
              <use :xlink:href="`#${scope.row['type']}`"></use>
            </svg>
            <span>{{scope.row['type']}}</span>
          </div>
        </template>
      </el-table-column>
      <el-table-column
        prop="detail"
        label="描述"
        width="100">
      </el-table-column>
    </el-table>
</template>

<script>
import father from '../assets/svg/father.svg';
import husband from '../assets/svg/husband.svg';
import son from '../assets/svg/son.svg';

export default {
  name: "my-table",
  data() {
    return {
      tableData: [{
        name: '李庆1',
        type: 'father',
        detail: '父亲'
      }, {
        name: '李庆2',
        type: 'husband',
        detail: '丈夫'
      }, {
        name: '李庆3',
        type: 'son',
        detail: '儿子'
      }]
    }
  },
  mounted() {
  }
}
</script>

<style lang="less" scoped>

</style>

如果想要在本地运行这个demo,请继续参考以下信息:

demo目录结构如下:
在这里插入图片描述

package.json(注意依赖项的版本,不配套的版本可能导致工程无法正常运行):

{
  "name": "elementuitableicon",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "webpack-dev-server --open --hot",
    "build": "webpack --progress --hide-modules"
  },
  "author": "liqing",
  "license": "ISC",
  "dependencies": {
    "element-ui": "^2.15.7",
    "html-webpack-plugin": "^3.2.0",
    "svg-sprite-loader": "^6.0.7",
    "vue": "^2.6.14",
    "vue-loader": "^15.7.0",
    "vue-template-compiler": "^2.6.14",
    "webpack": "^4.34.0",
    "webpack-cli": "^3.3.4",
    "webpack-dev-server": "^3.7.1"
  }
}

webpack.config.js代码如下:

/*
 * @Author: liqing
 * @Date: 2023-08-08 14:19:05
 * @LastEditors: liqing
 * @LastEditTime: 2023-08-09 09:58:24
 * @Description: description
 */
'use strict';
const path = require("path");
const HtmlWebpackPlugin = require('html-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
    entry: {
        "main": "./src/main.js"
    },
    output: {
        path: path.resolve(__dirname, "build"),
        filename: "[name].js"
    },
    devServer: {
        historyApiFallback: true,
        overlay: true
    },
    resolve: {
        alias: {
            'vue$': 'vue/dist/vue.esm.js',
            '@': path.resolve(__dirname, 'src'),
        }
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader'
            },
            {
                test: /\.svg$/,
                loader: 'svg-sprite-loader',
                exclude: /node_modules/,
                include: [path.resolve(__dirname, './src/assets/svg')],
            },
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: 'index.html',
            inject: 'body'
        }),
        new VueLoaderPlugin()
    ]
};

要处理svg文件必须依赖svg-sprite-loader,否则会有如下错误提示(解析svg文件失败的报错):

ERROR in ./src/assets/svg/father.svg 1:0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders

index.html代码如下:

<!--
 * @Author: liqing
 * @Date: 2023-08-08 14:16:58
 * @LastEditors: liqing
 * @LastEditTime: 2023-08-08 14:17:10
 * @Description: description
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
</div>
</body>
</html>

main.js代码如下:

import Vue from 'vue'
import { Table, TableColumn } from 'element-ui';
Vue.use(Table);
Vue.use(TableColumn);

import MyTable from './components/MyTable.vue'

new Vue({
    el: '#app',
    components: { MyTable },
    template: '<my-table></my-table>'
});

father.svg:

<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" data-name="icon/20/图片合成"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3h14v14H3Z" data-name="路径 15901"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m3.287 13.813 3.712-3.712 2.81 2.81" data-name="路径 15902"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6.594 16.504 8.403-8.403 1.627 1.626" data-name="路径 15903"/><circle cx="1" cy="1" r="1" fill="currentColor" data-name="椭圆 604" transform="translate(6 5)"/></svg>

husband.svg:

<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" data-name="icon/20/标记"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3a12.328 12.328 0 0 1 3.875-1c1.6 0 4.879 2 6.347 2A12.625 12.625 0 0 0 17 3v9a9.666 9.666 0 0 1-3.594 1c-1.719.031-4.687-2-6.531-2A10.4 10.4 0 0 0 3 12Z" data-name="路径 15762"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.998 17V4" data-name="路径 15763"/></svg>

son.svg:

<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none"><path stroke="#4B5252" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7.915 17.764a7.592 7.592 0 0 1-4.186-2.738 8.147 8.147 0 0 1-1.729-5 7.79 7.79 0 0 1 1.7-4.892 8.52 8.52 0 0 1 4.461-2.9c-.58 2.432-.748 3.014-.755 3.038M12.084 2.236a7.593 7.593 0 0 1 4.187 2.739A8.148 8.148 0 0 1 18 9.977a7.789 7.789 0 0 1-1.7 4.888 8.519 8.519 0 0 1-4.461 2.9c.58-2.432.748-3.014.755-3.037"/></svg>

demo运行

按之前给出的demo目录结构把上述文件放到对应的路径下,执行npm install下载依赖项后,再执行npm run dev即可运行demo(如果发现无法运行,检查一下本地的依赖项版本是否和package.json中保持一致)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/860305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux命令200例:mount将文件系统挂载到指定目录下(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

关系型数据库的设计

范式 关系 注意&#xff1a;根据阿里开发规范&#xff0c;不再设置数据库的外键&#xff0c;在应用层保证外键逻辑即可 数据库设计 1:1 1:n 设想学生-班级案例&#xff0c;若在班级中保存所有学生的主键&#xff0c;则表长不好预测&#xff0c;表的数据亢余。 所以是在多的…

【linux--->高级IO】

文章目录 [TOC](文章目录) 一、五种IO模型概念1.阻塞IO2.非阻塞IO3.信号驱动IO4.多路复用/多路转接IO5.异步IO 二、非阻塞IO之fcntl应用1.fcntl系统调用接口介绍2.用fcntl实现非阻塞IO 三、多路转接IO之select应用1.select接口介绍2.使用select实现多路转接IOselect的优缺点 四…

开源力量再现,国产操作系统商业化的全新探索

文章目录 1. 开源运动的兴起2. 开源力量的推动3. 国产操作系统的崭露头角3.1 国产操作系统有哪些 4.国产操作系统的商业化探索5.开源力量对国产操作系统商业化的推动 操作系统作为连接硬件、中间件、数据库、应用软件的纽带&#xff0c;被认为是软件技术体系中最核心的基础软件…

【人工智能前沿弄潮】—— SAM系列:玩转SAM(Segment Anything)

玩转SAM(Segment Anything) 官网链接&#xff1a; Segment Anything | Meta AI (segment-anything.com) github链接&#xff1a; facebookresearch/segment-anything: The repository provides code for running inference with the SegmentAnything Model (SAM), links fo…

vue实现5*5宫格当鼠标滑过选中的正方形背景颜色统一变色

vue实现5*5宫格当鼠标滑过选中的正方形背景颜色统一变色 1、实现的效果 2、完整代码展示 <template><div id"app" mouseleave"handleMouseLeave({row: 0, col: 0 })"><div v-for"rowItem in squareNumber" :key"rowItem…

Redis的简介,安装(Linux、Windows),配置文件的修改---详细介绍

Redis基础 Redis是一个基于内存的key-value结构数据库。 基于内存存储&#xff0c;读写性能高适合存储热点数据&#xff08;热点商品、资讯、新闻)企业应用广泛 1、Redis入门 1.1、Redis简介 The open source, in-memory data store used by millions of developers as a …

C++——关于命名空间

写c项目时&#xff0c;大家常用到的一句话就是&#xff1a; using namespace std; 怎么具体解析这句话呢&#xff1f; 命名冲突&#xff1a; 在c语言中&#xff0c;我们有变量的命名规范&#xff0c;如果一个变量名或者函数名和某个库里面自带的库函数或者某个关键字重名&…

电脑麦克风没声音?

这3招就可以解决&#xff01; 在我们使用电脑录制视频时&#xff0c;有时会遇到一个令人头疼的问题&#xff1a;麦克风没有声音。那么&#xff0c;为什么会出现这种情况呢&#xff1f;更重要的是&#xff0c;我们应该如何解决这个问题呢&#xff1f;本文将介绍3种方法&#xf…

MySQL 中的 Hash 索引

Hash 本身是一个函数&#xff0c;又被称为散列函数&#xff0c;它可以帮助我们大幅提升检索数据的效率。打个比方&#xff0c;Hash 就好像一个智能前台&#xff0c;你只要告诉它想要查找的人的姓名&#xff0c;它就会告诉你那个人坐在哪个位置&#xff0c;只需要一次交互就可以…

【Cocos Creator 项目实战 】消灭星星加强版(附带完整源码工程)

本文乃Siliphen原创&#xff0c;转载请注明出处 目录 概述 游戏整体流程 游戏框架设计 单一职责的类 主要流程控制类 核心玩法模块 UI&#xff1a; 游戏世界&#xff1a; 本文项目的代码组织结构 作者项目实践总结 场景只有一个入口脚本 尽量少在节点上挂载脚本 构…

四级以内的单词

单词 第一单元 excuse&#xff0c;me&#xff0c;yes&#xff0c;is&#xff0c;this&#xff0c;your&#xff0c;handbag&#xff0c;pardon&#xff0c;it&#xff0c;thank&#xff0c;you&#xff0c;very&#xff0c;much&#xff0c;pen&#xff0c;pencil&#xff0c…

模拟量电流电压采集软件使用教程

一.启动模拟量采集系统。打开软件需要登录用户 二.主界面是采集监控界面&#xff0c;每组采集柜设置采集不同产品和参数&#xff0c;选中产品判断设备连接状态和设置输出产品电压。 三.扫描每组柜的产品电流电压数据&#xff0c;判断每组柜哪些通道放了采集产品&#xff0c;扫描…

【云原生】K8S集群

目录 一、调度约束1.1 POT的创建过程1.1调度过程 二、指定节点调度2.1 通过标签选择节点 三、亲和性3.1requiredDuringSchedulingIgnoredDuringExecution&#xff1a;硬策略3.1 preferredDuringSchedulingIgnoredDuringExecution&#xff1a;软策略3.3Pod亲和性与反亲和性3.4使…

分支和循环语句(2)(C语言)

目录 do...while()循环 do语句的语法 do语句的特点 do while循环中的break和continue 练习 goto语句 do...while()循环 do语句的语法 do 循环语句; while(表达式); do语句的特点 循环至少执行一次&#xff0c;使用的场景有限&#xff0c;所以不是经常使用。 #inc…

C#导入数据使用Task异步处理耗时任务

C#多线程中&#xff0c;我们可以使用async和await来异步处理耗时任务。 现在我们打开一个Excel表格&#xff0c;将Excel表格的每一行数据进行处理&#xff0c;并存储到数据库中 新建Windows应用程序DataImportDemo&#xff0c;.net framework 4.6.1 将默认的Form1重命名为Fo…

js防止F12扒数据

添加 js 代码防止F12扒数据 ((function() {var callbacks [],timeLimit 50,open false;setInterval(loop, 1);return {addListener: function(fn) {callbacks.push(fn);},cancleListenr: function(fn) {callbacks callbacks.filter(function(v) {return v ! fn;});}}funct…

面试八股文Mysql:(1)事务实现的原理

1. 什么是事务 事务就是一组数据库操作&#xff0c;这些操作是一个atomic&#xff08;原子性的操作&#xff09; &#xff0c;不可分割&#xff0c;要么都执行&#xff0c;要么回滚&#xff08;rollback&#xff09;都不执行。这样就避免了某个操作成功某个操作失败&#xff0…

藏语翻译器:藏语翻译小助手

这是一款翻译功能齐全的翻译软件&#xff0c;主打藏语翻译功能&#xff0c;同时具备文字翻译、图片翻译、音频翻译、视频翻译、文档翻译等热门功能&#xff0c;支持将翻译结果导出为可编辑的文本文档&#xff0c;方便后续编辑整理。支持朗读原文和译文&#xff0c;帮助我们学习…

LeetCode209. 长度最小的子数组

题目&#xff1a;LeetCode209. 长度最小的子数组 描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子…