如何在vue中使用svg

vue

1、安装依赖

npm install svg-sprite-loader --save-dev

2、在config文件中配置

   const path = require('path');

  

  function resolve(dir) {

    return path.join(__dirname, dir)

  }




chainWebpack(config) {

// set svg-sprite-loader

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()

}

3、在src/components下新建文件夹及文件SvgIcon/index.vue,index.vue中内容如下

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'

}

}

}

}

</script>

<style scoped>

.svg-icon {

width: 1em;

height: 1em;

vertical-align: -0.15em;

fill: currentColor;

overflow: hidden;

}

</style>

4、在src下新建icons文件夹,及icons文件夹下svg文件夹、index.js文件, index.js文件内容如下

其中index.js代码如下:

import Vue from 'vue'

import SvgIcon from '@/components/SvgIcon'// svg组件

// register globally

Vue.component('svg-icon', SvgIcon)

const req = require.context('./svg', false, /\.svg$/)

const requireAll = requireContext => requireContext.keys().map(requireContext)

requireAll(req)

5、在main.js中引入

import '@/icons' // icon

6、在项目中使用

 在 阿里icon适量图库随便下载个svg格式的图,

在svg文件夹下,创建一个test.svg文件,将复制下来的svg代码贴进去

在项目中使用

<svg-icon icon-class="test"></svg-icon>

效果:

vue-cli2的项目中如何引入

同样的上面的文件引入方式还是一样的:一样需要安装

npm install svg-sprite-loader --save-dev

在webpack.base.conf.js中加上:

rules中:

           {

test: /\.svg$/,

loader: 'svg-sprite-loader',

include: [resolve('src/icons')],

options: {

symbolId: 'icon-[name]' // name代表图标的名字

}

}

注意:由于vue-cli默认情况下会使用 url-loader 对svg进行处理(如下代码),会将它放在/img 目录下,所以这时候我们引入svg-sprite-loader 会引发一些冲突。我们可以使用exclude: [resolve('src/icons')],让url-loader只处理除此文件夹之外的svg。

{

test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,

loader: 'url-loader',

exclude: [resolve('src/icons')], // 使用exclude排除src/icons,让url-loader只处理除此文件夹之外的svg

options: {

limit: 10000,

name: utils.assetsPath('img/[name].[hash:7].[ext]')

}

}

然后,就可以愉快在vue-cli2搭建的项目中使用svg了,使用方式和上诉相同

以上是 如何在vue中使用svg 的全部内容, 来源链接: utcz.com/z/378949.html

回到顶部