踩坑 | vue动态绑定img标签src属性的一系列报错

文章目录

踩坑 | vue项目运行后使用require()图片也不显示

问题描述

在网上查阅之后,发现结论是在使用vue动态加载图片时,必须使用require。但是采用了这种写法发现都不显示。

require是在运行时加载,import是编译时加载 ,如果需要使用import就提前导入图片。

js 复制代码
<img :src="imgUrl" />

//js
import logo from "../assets/logo.png";
const imgUrl = logo;

不显示图片的写法

js 复制代码
<img :src="imgSrc"></img>
<img :src="require(imgSrc)"></img>

//js
const imgSrc = '@common/resources/images/coronaryArtery.png'

问题 :通过控制台查看并没有解析该地址的图片,

vue中动态设置img的src不生效问题的原因

js 复制代码
<template>
    <img :src="img_src">
</template>
<script lang="ts" setup>
const img_src = './assets/icons/home.svg'
</script>

控制台查看发现src地址没有解析,网上很多说原因是webpack的问题?这里我看了下没有理解到。

我理解的是动态绑定src,src去读取img_src变量的值,该变量的值就是一个字符串,所以最后显示的是字符串没有解析地址去获取图片。

使用require生效的原因,是src读取的值变成了require的返回值。

require is not defined

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

网上的说法是:因为requirewebpack提供的一种加载能力,但是vue3项目时搭配vite的,所以这里应该用vite提供的静态资源载入方法,

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

解决办法

虽然img_src的值也是字符串,但是一个网站可以访问。

js 复制代码
<img :src="img_src">

//下面两种写法都可以
const img_src = new URL(`./assets/icons/home.svg`, import.meta.url).href;//http://localhost:5173/src/assets/icons/home.svg
const img_src = new URL(`./assets/icons/home.svg`, import.meta.url);

解决办法1:src属性直接传入地址

img标签的src属性中直接传入地址

该方法适合于单图片的页面

js 复制代码
<img src="@common/resources/images/coronaryArtery.png" />
<img :src="require('@common/resources/images/coronaryArtery.png')" />

常见场景:不满足

场景1:img标签都在被封装好的组件内部,我们利用组件的属性将地址值传递。

场景2:图片很多,需要循环利用其地址,

解决办法2

之前的写法image_src的类型是字符串,现在的写法image_srcrequire引用之后的返回值。

之前就算img标签动态使用image_src,值也是从默认的字符串变为image_src本身(也是一个字符串)

js 复制代码
//html
<img :src="image_src " />
//js
const image_src = require('@viewer/assets/toolbar-icons/coronaryArtery.png');
相关推荐
大家的林语冰几秒前
ES5 凉凉,Babel 8 正式发布,默认不再编译为 ES5 和 CJS......
前端·javascript·前端工程化
weedsfly2 小时前
异步编程全景与事件循环——彻底搞懂 JS 执行机制
前端·javascript
用户1733598075372 小时前
纯前端 PDF 数字签名实战:Vue 3 + pdf-lib 在浏览器里完成签名嵌入
前端·javascript
JieE21213 小时前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE21213 小时前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
kyriewen17 小时前
我用 AI 一周写完了整个项目,上线第一天就崩了——这是我踩过最贵的 5 个坑
前端·javascript·ai编程
Larcher18 小时前
AI Loop:让AI像人一样自主完成任务的核心机制
javascript·人工智能·设计模式
默_笙18 小时前
🃏 JS 只有 8 种数据类型,但我花了 2 天才搞懂 null 和 undefined 的区别
javascript
jump_jump18 小时前
流式 HTML:从 htmx 片段装配到浏览器原生增量渲染
javascript·性能优化·前端工程化
swipe20 小时前
正则表达式入门到进阶:从表单校验到手写模板引擎
前端·javascript·面试