Как импортировать svg во vue 3?

Во Vue 3 импортирование SVG осуществляется с использованием синтаксиса ES модулей и встроенного инструмента import() для динамической загрузки модуля.

Для начала, убедитесь, что файл SVG находится в доступной директории вашего проекта. Затем можно использовать один из следующих подходов для импортирования SVG.

1. Импортирование SVG как компонента Vue:

В данном подходе мы можем преобразовать SVG-файлы в компоненты Vue, которые затем можно использовать в шаблонах. Для этого создаем файл с расширением .vue и добавляем блок <template>, в котором располагается SVG-разметка.

<template>
  <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
    <!-- SVG разметка -->
  </svg>
</template>

<script>
export default {
  name: 'SvgComponent',
}
</script>

Затем мы можем импортировать этот компонент в другую часть кода:

<template>
  <div>
    <SvgComponent />
  </div>
</template>

<script>
import SvgComponent from '@/components/SvgComponent.vue'

export default {
  name: 'MyComponent',
  components: {
    SvgComponent,
  },
}
</script>

Теперь вы можете использовать <SvgComponent /> в шаблоне вашего компонента.

2. Использование директивы v-html:

Если вы хотите использовать SVG-разметку напрямую в шаблоне без преобразования в отдельный компонент, вы можете воспользоваться директивой v-html, которая позволяет рендерить HTML код из строки:

<template>
  <div v-html="svgCode"></div>
</template>

<script>
import svgCode from '@/assets/svg/icon.svg'

export default {
  name: 'MyComponent',
  data() {
    return {
      svgCode,
    }
  },
}
</script>

В этом случае, мы импортируем содержимое SVG-файла в виде строки и сохраняем его в переменной svgCode. Затем мы используем директиву v-html для рендеринга SVG-кода.

3. Использование метода import()

Если у вас много SVG-файлов или вам требуется загружать SVG динамически, вы можете использовать метод import() для динамической загрузки SVG-файлов в виде модулей.

<template>
  <div>
    <div ref="svgContainer"></div>
  </div>
</template>

<script>
export default {
  name: 'MyComponent',
  mounted() {
    this.loadSvg()
  },
  methods: {
    async loadSvg() {
      const svgModule = await import('@/assets/svg/icon.svg')
      const svgString = svgModule.default

      this.$refs.svgContainer.innerHTML = svgString
    },
  },
}
</script>

В этом случае мы используем import() для загрузки SVG-файла в виде модуля. Затем мы сохраняем содержимое SVG-файла в переменную svgString и отображаем его в указанном контейнере с помощью innerHTML.

Так что в зависимости от ваших потребностей и предпочтений, вы можете выбрать один из этих подходов для импортирования SVG во Vue 3.