How to introduce svg icons in Vue Method 1 of introducing svg icon in VueInstall yarn add svg-sprite-loader --dev svg component index.vue <!-- svg component --> <template> <svg class="svg-icon" :class="svgClass" aria-hidden="true"> <use :xlink:href="iconName" /> </svg> </template> <script> export default { name: 'SvgIcon', props: { // svg name svgName: { type: String, required: true } }, computed: { iconName() { return `#icon-${this.svgName}` }, svgClass() { if (this.svgName) { return 'svg-icon' + this.svgName } else { return 'svg-icon' } } } } </script> <style lang="less" scoped> .svg-icon { width: 100px; height: 100px; vertical-align: -0.15em; fill: currentColor; overflow: hidden; } </style> Register to the global index.js import Vue from 'vue' import SvgIcon from '@/components/SvgIcon' // Register to the global Vue.component('svg-icon', SvgIcon) const requireAll = requireContext => requireContext.keys().map(requireContext) const req = require.context('./svg', false, /\.svg$/) requireAll(req) vue.config.js module.exports = { chainWebpack: config => { config.module .rule('svg') .exclude.add(resolve('src/assets/icons')) .end() config.module .rule('icons') .test(/\.svg$/) .include.add(resolve('src/assets/icons')) .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) .end() } } Used in the page <!-- svg-name is the svg name--> <svg-icon svg-name="ic_home_news" /> Method 2 of introducing svg icon in Vuenpm install svg-sprite-loader --save-dev Add the following code to vue.config.js const path = require('path'); function resolve(dir) { // __dirname absolute path of the project root directory return path.join(__dirname, dir); } module.exports = { chainWebpack: config => { const svgRule = config.module.rule('svg'); // Clear all existing loaders // If you don't do this, subsequent loaders will be appended after the existing loaders for this rule svgRule.uses.clear(); svgRule .test(/\.svg$/) .include.add(path.resolve(__dirname, './src/icons/svg')) .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }); const fileRule = config.module.rule('file'); fileRule.uses.clear(); fileRule .test(/\.svg$/) .exclude.add(path.resolve(__dirname, './src/icons/svg')) .end() .use('file-loader') .loader('file-loader'); }, } Create the following file directory SvgIcon.vue code <template> <svg :class="svgClass" xmlns="http://www.w3.org/2000/svg"> <use :xlink:href="iconName" xmlns:xlink="http://www.w3.org/1999/xlink" /> </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> svg folder to place svg icon index.js code import Vue from 'vue'; import SvgIcon from '@/components/SvgIcon'; // svg component // register globally Vue.component('svg-icon', SvgIcon); const req = require.context('./svg', false, /\.svg$/); const requireAll = requireContext => requireContext.keys().map(requireContext); requireAll(req); Finally, introduce it in main.js import './icons'; Using SVG in the page
<svg-icon icon-class="features_ic_risk@1x" class-name="icon"></svg-icon> SummarizeThis concludes this article about two ways to introduce svg icons in Vue. For more relevant content about introducing svg icons in Vue, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: Example code for implementing dynamic column filtering in vue+element table
>>: How to use HTML 5 drag and drop API in Vue
This example uses jQuery to implement a mouse dra...
1. Introduction WHMCS provides an all-in-one solu...
Use CSS3 to animate the input box similar to the ...
Nginx (engine x) is a high-performance HTTP and r...
<br />The official version of Baidu Encyclop...
Compared with Windows system, Linux system provid...
The road ahead is long and arduous, but I will co...
MariaDB is installed by default in CentOS, which ...
Prepare: MySQL 8.0 Windows zip package download a...
Table of contents What does the COUNT function do...
Table of contents 1. Is setState synchronous? asy...
This article discusses the difficulties and ideas...
1. Tomcat service is not open Enter localhost:808...
Apple Mug Icons and Extras HD StorageBox – add on...
This article shares with you how to install the M...