一、基本概念
SVG(Scalable Vector Graphics)是一种基于 XML 的矢量图形格式,可以在不失真的情况下放大缩小。图标也可以以 SVG 格式进行储存和传播,且在不同的设备上进行缩放仍可保持清晰度。
Vue.js 是一款渐进式的 JavaScript 框架,允许开发者使用 MVVM 模式开发单页面应用。
二、为什么使用SVG图标
使用SVG图标相比于传统的图标格式,具有如下优势:
1、SVG 可以随着视口的尺寸缩放,且不失真。
2、SVG 文本和图形元素可以通过Javascript DOM API 或 Vue 模板动态修改,无需重新生成图像文件。
3、集中精力设计一组 SVG 图标可简化设计师和开发者之间的沟通交流。
三、如何使用SVG图标
在 Vue.js 中使用 SVG 图标的步骤如下:
1. 把 SVG 图标拷贝到 Vue 项目中
把 SVG 图标文件拷贝到 Vue 项目中的某个文件夹。例如,我将它们保存在 src/icons 文件夹中:
├─src/ │ ├─assets/ │ ├─components/ │ ├─icons/ │ │ ├─add.svg │ │ └─delete.svg │ └─views/ └─public/
2. 用 vue-svg-icon-loader 对 SVG 进行处理
运行命令 npm install vue-svg-icon-loader -D
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.svg$/,
loader: 'vue-svg-icon-loader'
}
]
}
}
3. 创建一个全局图标注册组件
在 Vue 应用程序中,使用全局图标组件可以轻松包含 SVG 图标:
// globalSvgIcon.js
import Vue from 'vue'
// require.context() 是 webpack 的 API,动态载入符合规则的文件。
const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('@/icons', false, /\.svg$/)
requireAll(req)
// 创建全局组件
Vue.component('svg-icon', {
template: '',
props: {
iconClass: {
type: String,
required: true
},
className: {
type: String,
default: ''
},
styleObj: {
type: Object,
default: () => ({})
}
},
computed: {
iconName() {
return \`#\${this.iconClass}\`
},
svgClass() {
if (this.className) {
return \`svg-icon \${this.className}\`
} else {
return 'svg-icon'
}
},
svgStyle() {
return this.styleObj
}
}
})
并把这个注册组件在主入口main.js中导入:
import Vue from 'vue'
import App from './App.vue'
import './globalSvgIcon.js' // 引入全局svg-icon组件
Vue.config.productionTip = false
new Vue({
render: h => h(App)
}).$mount('#app')
4. 在模板中使用图标组件
现在,你就可以在模板文件中使用自定义的 svg-icon 组件进行图标的使用:
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/197986.html
微信扫一扫
支付宝扫一扫