vue如何循环渲染svg图

问一下,vue如何循环渲染svg图,想做成这个效果,左侧有几个数据,右侧就有几个圆圈图

img


代码如下,这框起来的是一套圆圈图,但是这里面的数据是动态的,vue如何渲染

img

vue本身就是响应式渲染的,把这些动态数值都定义在data里面,然后在用js改变这些data值就行了;

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7769203
  • 这篇博客也不错, 你可以看下vue使用 svg图片以及修改svg图片颜色
  • 除此之外, 这篇博客: Vue项目使用svg图标中的 三. Vue项目使用svg图标的环境配置 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 安装依赖

    npm install --save-dev svg-sprite-loader
    
  • 您还可以看一下 陶新华老师的Vue实战-模版建站课程中的 【第九课】使用组件搭建考拉首页,并对组件进行优化小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题描述比较清晰,参考资料提供了实现该问题的一些代码和说明。根据参考资料和已有的知识,我可以给出以下解决方案:

    1. 在src/icons目录下创建svg文件夹,用于保存图标。将需要使用的SVG图标文件放入该文件夹中。

    2. 创建index.js文件,用于注册全局组件和导入SVG图标文件。index.js的代码如下:

    import Vue from 'vue'
    import SvgIcon from '@/components/SvgIcon' // svg component
    
    // 注册全局组件
    Vue.component('svg-icon', SvgIcon)
    
    // 导入所有的svg格式,使用require.context动态导入
    const req = require.context('./svg', false, /\.svg$/)
    const requireAll = requireContext => requireContext.keys().map(requireContext)
    requireAll(req)
    
    1. 创建组件SvgIcon.vue,用于渲染SVG图标。SvgIcon.vue的代码如下:
    <template>
      <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
      <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
        <use :xlink:href="iconName" />
      </svg>
    </template>
    
    <script>
    import { isExternal } from '@/utils/validate'
    
    export default {
      name: 'SvgIcon',
      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: 1em;
      height: 1em;
      vertical-align: -0.15em;
      fill: currentColor;
      overflow: hidden;
    }
    
    .svg-external-icon {
      background-color: currentColor;
      mask-size: cover!important;
      display: inline-block;
    }
    </style>
    
    1. 在utils文件夹下创建validate.js文件,用于判断图标路径是否为外部链接。validate.js的代码如下:
    export function isExternal(path) {
      return /^(https?:|mailto:|tel:)/.test(path)
    }
    
    1. 在main.js中引入icons文件夹,代码如下:
    import '@/icons'
    

    接下来,你可以在Vue的组件中使用标签来循环渲染SVG图形。例如,你可以使用v-for指令来循环渲染一组图标,代码如下:

    <template>
      <div>
        <svg-icon v-for="icon in icons" :key="icon" :icon-class="icon" />
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          icons: ['user', 'home', 'settings'] // 根据需要替换为实际的图标名称数组
        }
      }
    }
    </script>
    

    通过以上步骤,你就可以在Vue中循环渲染SVG图形了。每个图标会使用组件进行渲染,组件会根据传入的图标名称动态加载对应的SVG图标。