创建SvgIcon组件
在 components
文件夹下新建 SvgIcon
文件夹,并在 SvgIcon
文件夹下新建 index.vue
文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <template> <svg :class="svgClass" aria-hidden="true"> <use :xlink:href="iconName"></use> </svg> </template>
<script> export default { name: 'svg-icon', props: { iconClass: { type: String, required: true }, className: { type: String } }, 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>
|
创建icons文件夹
在 src
文件夹下新建 icons
文件夹,并在 icons
文件夹下新建 svg
文件夹和 index.js
文件。 svg
文件夹中用来存放各种扩展的.svg图标。 index.js
文件内容如下:
1 2 3 4 5 6 7 8 9 10
| import Vue from 'vue' import SvgIcon from '@/components/SvgIcon'
Vue.component('svg-icon', SvgIcon)
const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('./svg', false, /\.svg$/) requireAll(req)
|
在main.js中引入
下载插件
在项目的目录下,执行命令:
1
| npm i svg-sprite-loader --save
|
配置
在 build/webpack.base.conf.js
文件中,新增:
1 2 3 4 5 6 7 8 9 10 11 12
| { test: /\.svg$/, loader: 'svg-sprite-loader', include: [resolve('src/icons')], options: { symbolId: 'icon-[name]' } }
和
exclude: [resolve('src/icons')],
|
添加后,如下代码所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| module: { rules: [ ...(config.dev.useEslint ? [createLintingRule()] : []), { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: 'url-loader', exclude: [resolve('src/icons')], options: { limit: 10000, name: utils.assetsPath('img/[name].[hash:7].[ext]') } }, { test: /\.svg$/, loader: 'svg-sprite-loader', include: [resolve('src/icons')], options: { symbolId: 'icon-[name]' } } ] },
|
使用
1
| <svg-icon icon-class="user" />
|