vue中图片不显示问题 - vue中静态资源加载

这篇具有很好参考价值的文章主要介绍了vue中图片不显示问题 - vue中静态资源加载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue中图片不显示问题

静态资源

  • 在 JavaScript 被导入或在 template/CSS 中通过相对路径被引用。这类引用会被 webpack 处理后再输出到打包后的文件。
  • 放置在 public(static)目录下或通过绝对路径被引用。这类资源将会直接被拷贝到打包后的文件,而不会经过 webpack 的处理。
    config.jsbuild.assetsPublicPath build.assetsSubDirectory中设置
// config/index.js
module.exports = {
  // ...
  build: {
    assetsPublicPath: '/',
    assetsSubDirectory: 'static'
  }
}

URL 转换规则

  • 如果URL是一个绝对路径如/panda.png,则该路径会被保留
  • 如果URL以.开头,会被理解为相对路径,并基于目录结构进行解析。没有前缀的URL, 如assets/logo.png 将会被看成相对URL,并且转换成./assets/logo.png。例如,url(./image.png) 会被翻译为 require('./image.png')
  • 如果URL以@开头,也会作为一个模块请求被解析。Vue CLI 默认会设置一个指向 /src 的别名 @。(仅作用于模版中)

webpack 静态资源处理

*.vue组件中,所有的templatescss都会被vue-html-loadercss-loader解析,寻找资源的URL

在JavaScript里获取资源路径
为了能让Webpack返回正确的资源路径,使用require('./relative/path/to/file.jpg'),由file-loader进行解析,然后返回处理过的URL

图片不显示问题

问题描述

直接传地址是可以正常显示的

<img src="./assets/tile.jpg" alt="">

vue中图片不显示问题 - vue中静态资源加载,踩坑记录,Vue/React,vue.js,前端,javascript

但很多需求不允许直接传递。比如父组件往子组件传递图片地址等。然后发现使用变量传递字符串后图片不显示。

/* 错误写法 */
// js
const imgSrc = './assets/tile.jpg'

//template
<img :src="imgSrc"></img>

vue中图片不显示问题 - vue中静态资源加载,踩坑记录,Vue/React,vue.js,前端,javascript
原因
根据结果来看,相对地址没有被解析。在webpack中会将图片来当做模块来用,因为是动态加载的,所以url-loader将无法解析图片地址(被webpack解析到的路径都会被解析为/static/img/[filename].png)

解决办法1:使用require引入

正确的引入方法
使用require引用后,由file-loader进行解析,然后返回处理过的URL

const img_src = require('../../assets/images/panda.png');
console.log(img_src); // 打印 ./assets/images/panda-aad48f9a4cf0f953ccb4af0ad32bd3cc.png

<img :src="imgSrc"></img>

使用require的错误引入方法

<img :src="require(imgSrc)"></img>

这里的错误原因理解的是动态绑定src,img_src被理解为变量,而require没有被理解为变量。src去读取img_src变量的值,该变量的值就是一个字符串,所以最后显示的是字符串没有解析地址去获取图片。
vue中图片不显示问题 - vue中静态资源加载,踩坑记录,Vue/React,vue.js,前端,javascript

require is not defined

vue3+typeScript使用require方法引入图片的时候会报错require is not defined

vue中图片不显示问题 - vue中静态资源加载,踩坑记录,Vue/React,vue.js,前端,javascript
因为requirewebpack提供的一种加载能力,但是vue3项目时搭配vite的,所以这里应该用vite提供的静态资源载入方法,

vite官网的静态资源载入方法

import.meta.url 是一个 ESM 的原生功能,会暴露当前模块的 URL。与原生的 URL 构造器 组合使用,在一个 JavaScript 模块中,通过相对路径我们就能得到一个被完整解析的静态资源 URL

// js
const img_src = new URL("./assets/tile.jpg", import.meta.url).href
//img_src: http://127.0.0.1:5173/src/assets/tile.jpg 
//import.meta.url: http://127.0.0.1:5173/src/App.vue?t=1706082462328
console.log(img_src,import.meta.url)


//template
<img :src="img_src" alt="">

解决办法2:使用import引入

打印tile的结果是/src/assets/tile.jpgimport引入后地址由相对路径变成了绝对路径,webpack不会对绝对路径进行处理。

require是在运行时加载,import是编译时加载

// js
import tile from "./assets/tile.jpg";
console.log(tile)

//template
<img :src="tile" alt="">

vue中图片不显示问题 - vue中静态资源加载,踩坑记录,Vue/React,vue.js,前端,javascript

解决办法3:将图片放进公共文件夹static或public

1.将图片放进公共文件夹static或public
2.然后使用绝对路径引入文章来源地址https://www.toymoban.com/news/detail-824511.html

到了这里,关于vue中图片不显示问题 - vue中静态资源加载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3 - vite 引入本地图片方法,页面引入本地静态资源图像详细教程,解决 UI 前端组件库的图片属性无法使用本地图像问题(无论是本地开发还是打包部署,本地图片的路径正常可用)

    在 webpack 中通常用 require() 来引入静态图片,但在 vite 中这种方法就不行了。 本文实现了 在 vue3+vite 项目开发中,实现引入本地图片(静态资源),并且 build 打包后依然正常运行, 支持普通 img 标签使用,也支持 UI 组件库的各种 “图片属性” 当参数进行使用。 如下图所示

    2024年02月08日
    浏览(45)
  • Unity队列加载图片,解决大量同时加载资源卡顿问题与思路

    1、思路:加载图片的请求都加到队列中,然后一个加载完一个再去加载下一个,直到加载完。 2、问题:         问题是相对也存在的。当加载的数据还在队列中,但是已经跳转到其它的场景,则会出现报错的问题。         每次跳转场景的时候,需要把队列中的数据情况

    2024年02月16日
    浏览(39)
  • VUE使用docxtemplater导出word(带图片) 踩坑 表格循环空格 ,canvas.toDataURL图片失真模糊问题

    参考:https://www.codetd.com/article/15219743 安装 关键代码JS部分 导出函数 vue 中引入上述js文件和方法 模板内容 自己准备一个docx文档,然后里面标注好需替换的参数 列表循环-- {#list}{name}{/list} 单个参数–{} 图片–{%imgUrl} 大概就这些,我也是从参考链接里看到的,至此基本能解决

    2024年02月15日
    浏览(34)
  • 【VUE】解决图片视频加载缓慢/首屏加载白屏的问题

      在 Vue3 项目中,有时候会出现图片视频加载缓慢、首屏加载白屏的问题 通常是由以下原因导致的: 图片或视频格式不当:如果图片或视频格式选择不当,比如选择了无损压缩格式,可能会导致文件大小过大,从而影响加载速度。 页面中同时加载了大量的图片和视频,导致

    2024年02月16日
    浏览(22)
  • Tomcat加载静态资源--防止SpringMVC拦截

    最简洁方式:使用API 在配置文件下写配置类SpringMvcSupport,并且让SpringMVC扫描到此文件夹@ComponentScan({\\\"com.itheima.controller\\\",\\\"com.itheima.config\\\"}) SpringMvcSupport配置类如下 步骤: 1、在config文件下写SpringMvcConfig配置类 2、在SpringMvcConfig也就是SpringMVC核心配置类中扫描到此文件夹,那么此

    2024年02月10日
    浏览(28)
  • 【VUE】解决VU2项目图片视频加载缓慢/首屏加载白屏的问题

    前端项目中,有时候会出现图片视频加载缓慢、首屏加载白屏的问题 之前写了一篇在VU3项目中的解决方案, 现在讲一下在 Vue2 项目中的解决方法,方法思路都差不多,在代码示例上会有一些小差别 通常是由以下原因导致的: 图片或视频格式不当 :如果图片或视频格式选择

    2024年02月16日
    浏览(30)
  • 记录--静态网站 H5 跳小程序,以及踩坑

    我司有 智慧功成家 APP和对应的小程序,现在已经实现APP分享到微信,微信点击分享链接直接进入小程序。 目前有一个问题就是我们APP在网警那边还没有完全审批下来,已经搞了几个月了,还不知道啥时能上线。微信对于这类分享是有限制的,可以分享1000次,后面不给分享了

    2024年02月05日
    浏览(44)
  • UE5 C++ 静态加载资源和类

    一.上篇文章创建组件并绑定之后 在Actor中加载初始化了组件,现在在组件中赋值。使用static ConstructorHelpers::FObjectFinderTTempName(TEXT(\\\"Copy Reference\\\"));再用TempName.Object 里面的资源都来自StarterContent   效果如下: 二.静态加载类 1.在Actor中再声明一个AActor类  2.在静态加载类时使用

    2024年02月21日
    浏览(38)
  • Electron-builder打包vue项目后,背景图片不加载的问题

    打包后的项目启动之后,背景图片没有成功加载,只有一片空白。此时打开调试工具可以看到,electron自动把图片路径加上了/img/  我们这时打开打包后的dist_electron文件夹,打开bundledimg目录,  这就是上面报错的路径。 对于背景图片,不要使用如下 background:url(\\\'..\\\') 的形式,这样写

    2024年02月09日
    浏览(36)
  • Django 加载静态资源及<!DOCTYPE html>标红解决办法

    1.文件夹位置: 用于开发者存放HTML页面。 本文件夹位置建立在app01文件夹目录下 -- 新建templates文件夹 -- 并在文件夹下创建html文件。 该文件的文件名与上述链接指向的html文件名称相同。 2.要点: 优先去项目的根目录的templates中寻找(这个需要提前配置),不配置则无效。

    2023年04月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包