当前位置: 首页 > news >正文

在 Vue 项目中引入静态图片有多种方式

在 Vue 项目中引入静态图片有多种方式,具体取决于你的项目结构和使用的构建工具(如 Vite、Webpack 等)。以下是几种常见的方法:


1. 将图片放在 public 目录下

如果你的项目使用的是 Vite 或者其他现代前端构建工具,通常会有一个 public 目录。这个目录下的文件会被直接复制到构建输出目录中,因此可以直接通过相对路径引用。

步骤:
  • logo.png 放在 public/image/ 目录下。
  • 在代码中直接使用相对路径引用图片。
const companyInfo = reactive({
    companyLogo: '/image/logo.png',
    companyName: 'NTV GBS',
    productVersion: '3.0'
})

在模板中:

<img :src="companyLogo" alt="logo" class="logo">

2. 将图片放在 src/assets 目录下

如果图片放在 src/assets 目录下,需要使用 import 语句来引入图片,并将其赋值给一个变量。

步骤:
  • logo.png 放在 src/assets/ 目录下。
  • 使用 import 语句引入图片。
import logo from '@/assets/logo.png'

const companyInfo = reactive({
    companyLogo: logo,
    companyName: 'NTV GBS',
    productVersion: '3.0'
})

在模板中:

<img :src="companyLogo" alt="logo" class="logo">

3. 使用环境变量

如果你希望在不同环境下使用不同的图片路径(例如开发环境和生产环境),可以使用环境变量。

步骤:
  • .env.development 文件中定义一个环境变量:
VITE_LOGO_URL=/image/logo.png
  • 在代码中引用:
const companyInfo = reactive({
    companyLogo: import.meta.env.VITE_LOGO_URL,
    companyName: 'NTV GBS',
    productVersion: '3.0'
})

4. 动态拼接 URL

如果 logo 是从接口获取的相对路径,可以在代码中动态拼接完整的 URL。

步骤:
  • 在接口返回的数据中获取 logo 的相对路径。
  • 动态拼接完整的 URL。
const getSystemVersion = async () => {
    try {
        const data = await request.get('/api/system/version')
        if (data.code === 0) {
            const { name, version, logo, branch } = data.data.items[0]
            companyInfo.companyName = name
            companyInfo.productVersion = version
            companyInfo.companyLogo = logo ? `${import.meta.env.VITE_API_BASE_URL}${logo}` : '/image/logo.png'
            showCloudFeatures.value = branch === 'cloud'
        }
    } catch (error) {
        console.error('获取系统信息失败:', error)
        ElMessage.error('获取系统信息失败')
    }
}

5. 检查和调试

  • 确保图片路径正确并存在。
  • 打开浏览器开发者工具,检查网络请求,查看图片请求是否成功。
  • 检查控制台是否有错误信息,帮助定位问题。

总结

  • 将图片放在 public 目录下,直接使用相对路径引用。
  • 将图片放在 src/assets 目录下,使用 import 语句引入。
  • 使用环境变量区分不同环境下的图片路径。
  • 动态拼接 URL 处理从接口获取的相对路径。
  • 检查和调试以确保图片能够正常显示。

通过以上步骤,你可以正确引入并显示静态图片。

相关文章:

  • 基于PyQt5与Open3D的轻量化BIM工具开发指南(上)‌
  • 从 0 到 1 掌握鸿蒙 AudioRenderer 音频渲染:我的自学笔记与踩坑实录(API 14)
  • npm 报错 unable to resolve dependency tree
  • C++学习之云盘项目nginx
  • C++继承 ---- 继承是面向对象三大特性之一【好处:可以减少重复的代码】
  • Z 轴热膨胀系数:PCB 可靠性的关键因素与选材策略
  • 笔记本电脑关不了机是怎么回事 这有解决方法
  • 【R语言】二项分布,正态分布,极大似然估计实现
  • PC企业微信HOOK / iPad企业微信协议最新版研究
  • 神经网络量化2-pytorch测试动态量化
  • FPGA-流水灯
  • vulhub/joker 靶机----练习攻略
  • 基于Java(Springboot+Gradle+Mybatis+templeaf 框架)+Mysql构建的(Web)校园二手平台系统
  • on-policy对比off-policy
  • 微服务的网关配置
  • 厨卫行业供应链产销协同前中后大平台现状需求分析报告+P120(120页PPT)(文末有下载方式)
  • Java面试黄金宝典2
  • LeetCode BFS解决FloodFill算法
  • 无需刷机、root,畅享原生安卓的丝滑体验。
  • 智能提示语链分析平台技术解析
  • 人民日报民生观:转人工客服,怎么这么难?
  • 车载抬头显示爆发在即?业内:凭借市场和产业链优势,国内供应商实现反超
  • 金砖国家召开经贸联络组司局级特别会议,呼吁共同抵制单边主义和贸易保护主义
  • 香港根据《维护国家安全条例》订立附属法例
  • 寒武纪陈天石:公司的产品力获得了行业客户广泛认可,芯片市场有望迎来新增量需求
  • 全国汽车以旧换新补贴申请量突破1000万份