• Vue 引入 svg文件


    在做图标展示时,一般使用fontawesome图标库,只用简单并且只需要下载并引入即可。npm install font-awesome --save

    但是发现身边也有人使用阿里巴巴的incofont,下载选择svg文件引入,具体封装和配置方法如下示:

    以下操作是参考了已有框架的代码进行整理

    1、在src/components下创建文件夹,命名为SvgIcon,并再SvgIcon文件夹下,新增目录index.vue文件:  

    <template>
        <svg :class="svgClass" aria-hidden="true" v-on="$listeners">
            <use :xlink:href="iconName" />
        </svg>
    </template>
     
    <script>
        export default {
            name: 'SvgIcon',
            props: {
                iconClass: {
                    type: String,
                    required: true
                },
                className: {
                    type: String,
                    default: ''
                }
            },
            computed: {
     
                iconName() {
                    return `#icon-${this.iconClass}`
                },
                svgClass() {
                    if (this.className) {
                        return 'svg-icon ' + this.className
                    } else {
                        return 'svg-icon'
                    }
                },
                styleExternalIcon() {
                    return {
                        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
                        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
                    }
                }
            }
        }
    </script>
     
    <style scoped>
        .svg-icon {
             1.5em;
            height: 1.5em;
            vertical-align: -0.15em;
            fill: currentColor;
            overflow: hidden;
        }
     
        .svg-external-icon {
            
            mask-size: cover!important;
            display: inline-block;
        }
    </style>

    2、在src目录下,新增文件夹,命名为icons,并再icons文件夹下,新增目录index.js文件和svg文件夹,其中svg文件夹里面存放的是svg文件。

      以下是src/icons/index.js文件的内容:

    import Vue from 'vue'
    import SvgIcon from '@/components/SvgIcon' // svg组件
    // 注册为全局组件
    Vue.component('svg-icon', SvgIcon)
    const req = require.context('./svg'false, /.svg$/)
    const requireAll = requireContext => requireContext.keys().map(requireContext)
    requireAll(req)

    3、在vue.config.js文件中,配置svg文件,其中chainWebpack里面的内容为svg的配置

    module.exports = {
        devServer: {
            port: 8000
        },
        configureWebpack: {
            name: projectName,
            resolve: {
                alias: {
                    '@': resolve('src'),
                    'views': resolve('src/views')
                }
            }
        },
        chainWebpack(config) {
            config.module
                .rule('svg')
                .exclude.add(resolve('src/icons'))
                .end()
            config.module
                .rule('icons')
                .test(/.svg$/)
                .include.add(resolve('src/icons'))
                .end()
                .use('svg-sprite-loader')
                .loader('svg-sprite-loader')
                .options({
                    symbolId: 'icon-[name]'
                })
                .end()
        }
    }

    4、在main.js直接引入inco文件夹

    // 引入全局inco
    import '@/icons'

    5、在页面直接使用组件svg-icon,其中incoClass命名等于svg文件的名称

    <svg-icon iconClass="example"/>
    <svg-icon iconClass="message"/>
    

      转自:https://www.cnblogs.com/luoxuemei/p/12154835.html

  • 相关阅读:
    博客园转载别人的文章的方法
    CSS属性:定位属性(图文详解)
    深入学习css伪类和伪元素及其用法
    CSS3:RGBA的使用方法
    display和visibility,(height: 0; overflow: hidden;)区别
    css居中div的几种常用方法
    高性能RTMP、RTSP、HLS(m3u8)、HTTPFLV流媒体服务器EasyNVR、EasyDSS、EasyGBS系列产品版本信息中获取的ip是否可以更改?
    EasyDSS高性能RTMP、HLS(m3u8)、HTTPFLV流媒体服务器问题之选定时间段录像进行观看会出现“视频播放等待”字样的问题解析
    RTSP、RTMP、HLS、HTTPFLV,Easy系列的流媒体服务核心产品EasyDSS_kernel在使用hls拉流提示跨域问题是什么原因造成的?
    EasyDSS高性能RTMP、HLS(m3u8)、HTTPFLV、RTSP流媒体服务器解决方案之EasyDSS版本免费更新的方法
  • 原文地址:https://www.cnblogs.com/jisi2012/p/14646804.html
Copyright © 2020-2023  润新知