#vue.js #svg #sprite
Вопрос:
У меня есть Vue 3.1.1
проект, и я вижу странную проблему. Если я помещу файл SVG в свой шаблон, который ссылается на спрайт, появится только первый его экземпляр.
Вот мой код шаблона:
<template>
<div>
<svg>
<use href="@/assets/images/icons-master.svg#project"></use>
</svg>
<svg>
<use href="@/assets/images/icons-master.svg#project"></use>
</svg>
</div>
</template>
Вот как он отображается в DOM (протестирован в Chrome, Firefox и Safari):
Видите, как он удаляет #project
путь к файлу из второго SVG?
Если я попробую использовать другое имя файла, я смогу увидеть первый экземпляр, в котором используется файл, а последующие SVG-файлы будут #id
удалены и не появятся.
Мой SVG-файл структурирован следующим образом.
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="project" viewbox="0 0 16 17">
<g ...>
<path ...>
</path>
</g>
</symbol>
</svg>
Раньше это прекрасно работало Vue 2.x
. Это неправильный синтаксис SVG или ошибка в Vue?
Ответ №1:
Это может быть ошибкой с Vite, но, похоже, обходной путь состоит в том, чтобы не использовать компонент @
пути из vite.config.js
:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': path.resolve(__dirname, '/src'),
},
}
})
Таким образом, обходной путь состоит в том, чтобы изменить путь SVG на этот:
src/assets/images/icons-master.svg#project
Где src
заменяет @
.