4 回答
TA贡献1853条经验 获得超6个赞
实际上,Vue CLI 开箱即用地支持 SVG。它在内部使用文件加载器。您可以通过在终端上运行以下命令来确认:
vue inspect --rules
如果列出了“svg”(应该是),那么您所要做的就是:
<template>
<div>
<img :src="myLogoSrc" alt="my-logo" />
</div>
</template>
<script>
// Please just use `@` to refer to the root "src" directory of the project
import myLogoSrc from "@/assets/myLogo.svg";
export default defineComponent({
name: "MyComponent",
setup() {
return {
myLogoSrc
};
}
});
</script>
因此,如果您的纯粹目的只是显示 SVG,则不需要任何第三方库。
当然,要满足 TypeScript 编译器对类型声明的要求:
declare module '*.svg' {
// It's really a string, precisely a resolved path pointing to the image file
const filePath: string;
export default filePath;
}
TA贡献1891条经验 获得超3个赞
vue-svg-loader 与 vue 3 不兼容。要导入 svg 并将其用作组件,只需将文件内容包装在“template”中
在组件中:
<template>
<div class="title">
<span>Lorem ipsum</span>
<Icon />
</div>
</template>
<script>
import Icon from '~/common/icons/icon.svg';
export default {
name: 'PageTitle',
components: { Icon },
};
</script>
网页包:
{
test: /\.svg$/,
use: ['vue-loader', path.resolve(__dirname, 'scripts/svg-to-vue.js')],
}
脚本/svg-to-vue.js:
module.exports = function (source) {
return `<template>\n${source}\n</template>`;
};
TA贡献1853条经验 获得超9个赞
不能肯定地说,因为我还没有尝试过 ts,
declare module '*.svg' {
import type { DefineComponent } from 'vue';
const component: DefineComponent;
export default component;
}
我看到你正在使用:
import * as MyLogo from "../../assets/myLogo.svg";
我认为应该是:
import MyLogo from "../../assets/myLogo.svg";
TA贡献1874条经验 获得超12个赞
全新安装的 vue.js 3.2 的示例:
<img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125"/>
添加回答
举报