Nuxt.js中使用svg图标

简介

vue-cli2.x搭建的vue项目中使用svg图标参考:Vue项目常见问题-项目中使用svg图标

vue-cli3.x搭建的vue项目中使用svg图标参考:基于Typescript的Vue项目中使用svg图标

Nuxt项目中使用svg图标思路相同,方法基本类似。以下是详细步骤

步骤

  • 安装svg-sprite-loadernpm i svg-sprite-loader --save-dev
  • assets/目录下新建目录icons/,用来放置图标相关文件
  • assets/icons/目录下新建svg/目录,用来放置svg/图标文件
  • components/目录下新建文件svgIcon.vue
<template> <svg :class="svgClass" aria-hidden="true"> <use :xlink:href="iconName"></use> </svg> </template> <script> export default { name: 'SvgIcon', props: { iconClass: { type: String, required: true, default: '' }, 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>
  • plugins/目录下新建文件icons.js
import Vue from 'vue' import SvgIcon from '../components/svgIcon'// svg组件 // register globally Vue.component('svg-icon', SvgIcon) const requireAll = requireContext => requireContext.keys().map(requireContext) const req = require.context('./svg', false, /\.svg$/) requireAll(req)
  • 修改nuxt.config.js文件
// ... module.exports = { // ... plugins: [ // ... { src: '@/plugins/icons', ssr: true } ] // ... build: { // ... extend (config, ctx) { // ... const svgRule = config.module.rules.find(rule => rule.test.test('.svg')) svgRule.exclude = [path.resolve(__dirname, 'assets/icons/svg')] // Includes /icons/svg for svg-sprite-loader config.module.rules.push({ test: /\.svg$/, include: [path.resolve(__dirname, 'assets/icons/svg')], loader: 'svg-sprite-loader', options: { symbolId: 'icon-[name]', }, }) } // ... } // ... }

vue组件中使用

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

备注:article为图标文件的文件名


创作不易,若本文对你有帮助,欢迎打赏支持作者!

 分享给好友: