在vue中使用svg(组件)

这篇具有很好参考价值的文章主要介绍了在vue中使用svg(组件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue项目中使用svg,有以下步骤:

1、安装 svg-sprite-loader 依赖

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

2、在 src 目录下新建 src/icons/svg 目录,存放项目所使用的所有图标 svg 文件

     在 vue-config.js 中添加配置:

module.exports = {
  chainWebpack(config) {
     //配置svg
      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、创建组件 components/SvgIcon.vue

<template>
  <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" ></div>
  <svg v-else :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName" />
  </svg>
</template>

<script>
import { isExternal } from '@/utils/validate'
import '@/icons'

export default {
  name: 'svg-icon',
  props: {
    iconClass: {
      type: String,
      required: true
    },
    className: {
      type: String,
      default: ''
    }
  },
  computed: {
    isExternal() {
      return isExternal(this.iconClass)
    },
    iconName() {
      return `#icon-${this.iconClass}`
    },
    svgClass() {
      if (this.className) {
        return 'svg-icon ' + this.className
      } else {
        return 'svg-icon'
      }
    },
    styleExternalIcon() {
      return {
        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
      }
    }
  }
}
</script>

<style scoped>
.svg-icon {
  /* width: 1rem;
  height: 1rem; */
  vertical-align: middle;
  fill: currentColor;
  overflow: hidden;
}

.svg-external-icon {
  background-color: currentColor;
  mask-size: cover!important;
  display: inline-block;
}
</style>

isExternal文件及作用

/**校验传入的iconClass是否为外部链接
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

4、在 src/icons 目录下创建 icons 文件

vue如何使用svg,vue.js,前端

 index.js中

import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component

// register globally
Vue.component('svg-icon', SvgIcon)

const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('./svg', false, /\.svg$/)
requireAll(req)

如果项目图标文件较多,可以对 icons 目录做详细的划分,然后修改上述 index.js

在 main.js 入口文件中 全局引入 icons

// main.js
import "./icons";

5、使用svg组件

 <svg-icon icon-class="svgName" class="icon" />
//svgName为.svg后缀前的文件名

// 引入组件
import SvgIcon from '@/components/SvgIcon'
components: {
    SvgIcon
}

注意:svg中样式由 fill属性控制,内联样式中写入,则无法修改;如果内联样式给定了颜色,此时子元素需要显式指定 fill 继承自父元素(否则继承的权重很低,样式无法被应用)文章来源地址https://www.toymoban.com/news/detail-601592.html

svg path {
    fill:inherit
}

到了这里,关于在vue中使用svg(组件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • svg之全局组件,配合雪碧图解决vue2的svg优化问题

    这里是vue2中的svg的完整解决方案的另一篇。 这里这个就是全局的svg组件,代码来自于webpack - 懒人神器:svg-sprite-loader实现自己的Icon组件 - 好好写代码吧 - SegmentFault 思否 老师的代码则是写成 这样的形式。其实和上面一个意思

    2024年02月19日
    浏览(54)
  • Vue 组件中如何引入外部的js文件

    在Vue中,通常我们引入一个js插件都是使用 npm  方式下载然后 import 使用的。但是我现在本地有了js文件或者是一个远程js文件链接,我不想使用 npm install xxx  的方式,有什么办法吗? 简单粗暴,直接在Vue项目的 index.html  中使用全局的方式引入,比如: 缺点: 不使用该js插

    2024年02月08日
    浏览(68)
  • 前端Vue篇之v-model 是如何实现的,语法糖实际是什么?v-model 可以被用在自定义组件上吗?如果可以,如何使用?

    v-model 在 Vue.js 中扮演着重要的角色,实现了表单输入和应用状态之间的双向数据绑定。其具体实现方式取决于所绑定元素的类型。 作用在表单元素上 : 当 v-model 用于表单元素(如 input、textarea)时,它动态绑定了 input 的 value 到指定的变量,并在触发 input 事件时动态更新这

    2024年04月28日
    浏览(42)
  • 【庖丁解牛】vue-element-admin前端CRUD通用操作组件详解,对,核心就是crud.js文件

    vue-element-admin 框架之所以能够快速定制应用,得益于其通配的CRUD操作,属性配置多样化且个性化,能够满足绝大部分开发需求,也方便了代码生成。 可以深入学习重点源文件是: src/components/Crud/crud.js ,一共 863 行代码,以及下图中其它四个vue组件,形成了对通用CRUD操作的高

    2024年01月18日
    浏览(59)
  • svg.js使用教程

    在日常web开发过程中,我们会需要显示一些图形化的元素,使用div+css、ps图片是常见的实现方式。 但使用svg来绘制可能更加合适,SVG是 可缩放矢量图形 ,有一些预定义的形状元素,可被开发者使用和操作: 矩形(rect)、 圆形(circle)、 椭圆(ellipse)、 线(line)、 折线(polyline)、 多

    2024年02月06日
    浏览(38)
  • Vue 组件中如何引入外部的js文件 的10种方法

    在Vue组件的 script 标签中使用 import 语句引入外部的JavaScript文件,适用于单个组件需要使用外部JavaScript文件的情况。这种方法可以在编译时静态地引入外部文件,并且可以通过 import 语句的路径指定具体的文件位置。 在Vue组件的 script 标签中使用 require 方法引入外部的JavaScr

    2024年02月10日
    浏览(47)
  • Vue3前端开发,如何获取组件内dom对象以及子组件的属性和方法

    Vue3前端开发,借助Ref来获取组件内dom对象,借助defineExpose编译宏可以获取到子组件的属性和方法。 app入口文件,我们作为父组件,在里面调用了自定义组件TestCom.vue。 先做了一个测试,借助于ref来访问自身的dom对象。如图所示是可以拿到的。 ref又称谓钩子函数,在vue2版本中

    2024年01月22日
    浏览(61)
  • vue使用打印组件print-js

    由于甲方要求,项目需要打印二维码标签,故开发此功能 安装包:npm install print-js --save print-js的使用 例如:在打印过程中会出现字体样式失效的问题:          加入这行代码即可 font_size: \\\'\\\',

    2024年02月10日
    浏览(64)
  • vue前端开发自学,子组件传递数据给父组件,使用$emit

    vue前端开发自学,子组件传递数据给父组件,使用$emit 父子组件之间互相传递数据的情况非常常见,下面为大家介绍的是,来自子组件,给父组件传递数据的情况。 如图,以上代码是父组件的代码情况,ComponentEvent.vue。 可以看出来,里面的特殊点,在于,有个子组件的引用和标

    2024年01月23日
    浏览(42)
  • vue将某个组件打包成js,在其他项目使用

    1、首先创建一个组件的文件,里面包括了组件页面和index.js,index.js的作用是把组件暴露出去,目录结构: 2、index.js里面的内容 3、配置package.json打包命令,可以通过 --mode 后面参数指定打包环境 注意:目前vue.config.js里面是没有任何配置的,到这里其实就可以了,运行打包命

    2024年02月16日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包