#svg #import #vue-component #vuejs3
#svg #импорт #vue-компонент #vuejs3
Вопрос:
У меня есть SVG, который я намерен импортировать как компонент VueComponent в свой компонент из каталога значков,
вот файл icons index.ts:
import { VueComponent as Spinner } from './spinner.svg'
export { Spinner }
вот как я импортирую SVG-счетчик:
import { Spinner } from '../assets/icons'
export default defineComponent({
components: { Spinner },
setup () {}
})
Я получаю сообщение об ошибке, в котором говорится, что запрошенный модуль не предоставляет экспорт с именем VueComponent, как показано ниже. Как мне решить эту проблему
Ответ №1:
Должен быть в состоянии сделать это с vue-svg-loader
Установите загрузчик
npm i -D vue-svg-loader@beta
создайте vue.config.js
файл в проекте с:
module.exports = {
chainWebpack: (config) => {
const svgRule = config.module.rule('svg');
svgRule.uses.clear();
svgRule
.use('vue-loader-v16')
.loader('vue-loader-v16')
.end()
.use('vue-svg-loader')
.loader('vue-svg-loader');
},
};
MySvgComponent.js
import MySvgFile from "../assets/mySvgFile.svg";
export { MySvgFile };
а затем использовать…
<script>
import {MySvgFile} from "./components/MySvgComponent";
export default {
name: "App",
components: {
MySvgFile
}
};
</script>
Просто обратите внимание, что определения svg могут не работать
вы можете попробовать это определение, хотя
declare module '*.svg' {
import type { DefineComponent } from 'vue';
const component: DefineComponent;
export default component;
}
Ответ №2:
Другим решением является создание компонента Vue для каждого значка. Например, AddIcon.vue
это значок со знаком . Содержимое файла:
<template>
<g>
<rect
id="Rectangle_1"
data-name="Rectangle 1"
width="100"
height="22"
rx="4"
transform="translate(0 39)"
fill="currentColor"
/>
<rect
id="Rectangle_2"
data-name="Rectangle 2"
width="100"
height="22"
rx="4"
transform="translate(61) rotate(90)"
fill="currentColor"
/>
</g>
</template>
Затем вы можете импортировать значок в родительский компонент, как и любой компонент vue.
import AddIcon from "@/components/icons/AddIcon.vue"
затем зарегистрируйте значок внутри компонентов
components: {
...
AddIcon,
...
}
И использовать его внутри шаблона родительского компонента, например:
<template>
<div>
<svg>
<add-icon />
</svg>
</div>
</template>