首页 > 其他分享 >SvgIcon全局组件---开发环境:vue3+vuecli5

SvgIcon全局组件---开发环境:vue3+vuecli5

时间:2023-10-17 19:57:59浏览次数:44  
标签:vuecli5 文件 vue svg --- 文件夹 vue3 组件 SvgIcon

开发背景

node v18.17.0(node -v)
npm v8.4.1(npm -v)
@vue/cli 5.0.8(vue -V)

0.SvgIcon全局组件

全局组件是指在应用程序的任何位置使用的组件,使用全局组件前需要在Vus.js实例中注册,并将其挂载到实例中。全局组件是可复用的Vus.js实例。

1.安装依赖svg-sprite-loader

  npm install svg-sprite-loader -D

安装成功后,在package.json文件中可以看到安装成功的版本号

2.下载并存放svg图标文件

2.1.在iconfont-阿里巴巴矢量图标库中下载svg文件

下载的svg文件分别命名homeIndex.svg,news.svg,newsCategory.svg

2.2.把下载的svg图标放进项目文件夹里

src文件里面的components文件夹,新建svgIcon文件夹,svgIcon文件夹里面新建icon文件夹,把下载的svg图标文件放到icon文件夹里

3.批量导入SVG图标文件

3.1.新建svg.js文件

src文件里面的components文件夹,components文件夹里面的svgIcon文件夹,svgIcon文件夹里面新建svg.js文件,svg.js文件的内容如下:

    // 获取当前icon目录所有以.svg为后缀的文件
    const context = require.context('./icon', false, /\.svg$/)
    // 解析获取.svg文件的文件名称,并返回
    const requireAll = (requireContext) => requireContext.keys().map(requireContext)
    // 执行
    requireAll(context)

3.2.导入新建的svg.js文件

在src文件夹里面的main.js文件加入如下代码

      import "./components/svgIcon/svg.js" // 批量导入svg文件

4.新建SvgIcon全局组件

4.1.新建组件文件Index.vue

src文件里面的components文件夹,components文件夹里面的svgIcon文件夹,svgIcon文件夹里面新建Index.vue文件,Index.vue文件的内容如下:

    iconName和className属性是从引用PageSidebar.vue的父组件传递过来的
    <template>
        <svg :class="svgClassName" aria-hidden="true">
            <use :xlink:href="svgIcon"></use>
        </svg>
    </template>

    <script>
    import { ref, computed } from "vue"
    export default {
        name: 'SvgIcon',
        props: {
            iconName: {
                type: String,
                default: ""
            },
            className: {
                type: String,
                default: ""
            },
        },
        setup(props) {
            const svgClassName = computed(() => {
                if(props.className){
                    return `svg_class ${props.className}`
                }
                return "svg_class"
            })
            const svgIcon = computed(() => `#icon-${props.iconName}`)
            return { svgClassName, svgIcon }
        }

    };
    </script>

    <style lang="scss" scoped>
    .svg_class{
        width: 1em;
        height: 1em;
        fill: currentColor;
        overflow: hidden;
        vertical-align: middle;
    }
    </style>

 4.2.导入新建组件文件Index.vue

在src文件夹下面的main.js文件加入如下代码

    import SvgIcon from "./components/svgIcon/Index.vue"

    const app = createApp(App)

    app
    .component("svg-icon", SvgIcon)
    .mount("#app");

5.配置svg-sprite-loader插件

在vue.config.js文件的chainWebpack对象进行如下配置和解析

5.1.当vue/cli的版本号为 5.0的情况

 5.2.当vue/cli的版本号为 4.0的情况

5.3.symbolId属性值中的name,即,为下载的svg文件的命名

 

6.在项目的侧边栏中,使用SvgIcon全局组件

6.1.把下载的svg名称同步到在路由中的meta.icon属性中去

 6.2.在侧边栏文件中使用SvgIcon全局组件

     <svg-icon></svg-icon>标签的icon-name属性和class-name属性是传入src/components/SvgIcon/Index.vue文件的属性iconName和className,如下,

7.效果图

 

标签:vuecli5,文件,vue,svg,---,文件夹,vue3,组件,SvgIcon
From: https://www.cnblogs.com/pwindy/p/17770463.html

相关文章

  • Go - Serving Static Files
    Problem: Youwanttoservestaticfilessuchasimages,CSS,andJavaScriptfiles.Solution: Usethehttp.FileServerfunctiontoservestaticfiles. funcmain(){dir:=http.Dir("./static")fs:=http.FileS......
  • L1-002&L1-003
    L1-002本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印*****************所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N......
  • 动态规划-爬楼梯问题
    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 我们用f(x)表示爬到第x级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以我们可以列出如下式子:f(x)=f(x−1)+f(x−2)它意味着爬到......
  • ad23Geber导出-官方教程(新版本-22.11版本后)
    -本文章只适用于22.11之后的ad版本geber导出,适配于ad23版本;若需要查看22.11之前的geber导出教程,请查看下方连接-ad22旧版Geber导出(22.11版本前)(含官方教程)(含坐标文件)_ad20导出坐标文件-CSDN博客 ——2023.10.17编辑1、AD生成geber文件导出(官方教程) 1、导出图像层1.1在PCB界......
  • 【v2v迁移】Xen2kvm 迁移-Windows篇
    迁移环境:源平台:华为FusionComputeV100R006C10SPC101目标平台:基于KVM虚拟化的云平台,本文以原生的libvirt为例虚拟机:Windowsserver2012R2具体操作步骤:本文的前3个步骤与【v2v迁移】Xen2kvm迁移-linux篇基本一致:导出vhd,安装qemu-img-hw工具,转换格式等。注意:导出之前,在源Wi......
  • HBase-hbase shell操作
    hbaseshell操作一、DDL操作1.开启hbaseshellhbaseshell 2.查看hbase状态Status 3.查看hbase版本Version 4.创建命名空间create_namespace'命名空间名' 5.显示所有命名空间list_namespace 6.删除命名空间在删除一个命名空间时,该命名空间不能包含任何的表,否则......
  • Hbase-预分区
    Hbase预分区HBase表在刚刚被创建时,只有1个分区(region),当一个region过大(达到hbase.hregion.max.filesize属性中定义的阈值,默认10GB)时,表将会进行split,分裂为2个分区。表在进行split的时候,会耗费大量的资源,频繁的分区对HBase的性能有巨大的影响。HBase提供了预分区功能,即用户可......
  • 记录--怎么写一个可以鼠标控制旋转的div?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助说在前面鼠标控制元素旋转在现在也是一个很常见的功能,让我们从实现div元素的旋转控制开始来了解元素旋转的具体原理和实现方法吧。效果展示体验地址code.juejin.cn/pen/7290719…实现步骤画一个div首先我......
  • 【发现一个问题】macos m2 下无法使用 x86_64-linux-musl-gcc 链接含有 avx512 指令
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯一开始是使用golang中的cgo来编译:envCC=cCGO_ENABLED=1GOOS=linuxGOARCH=amd64\CGO_CFLAGS="-mavx-mavx2-mavx512f-mavx512vl-mavx512bw-O2"\gobu......
  • FISCO-BCOS[WeBASEUtils工具类]
    packagepriv.pront.PetStore.utils;importcn.hutool.core.lang.Dict;importcn.hutool.http.Header;importcn.hutool.http.HttpRequest;importcn.hutool.http.HttpResponse;importcn.hutool.json.JSONArray;importcn.hutool.json.JSONObject;importcn.hutool.j......