vue中使用require动态获取图片地址方式

 更新时间:2023年06月05日 17:12:31   作者:全蛋  
这篇文章主要介绍了vue中使用require动态获取图片地址方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用require动态获取图片地址

项目场景

项目中根据图片不同的后缀名,展示不同的图片

问题描述

直接给图片的src绑定图片地址,图片不显示,使用 require('图片本地路径' + '地址变量' + '.png') 也不显示

<img :src="require('@/assets/img/' + item.url + '.png')" alt="" />

原因分析

vueDOM中直接引入的图片会被转为base64格式,但是使用变量引入的话,图片不会转为base64,所以不显示

解决方案

使用require.context实现前端工程化引入文件

require.context(directory, useSubdirectories, regExp)
  • directory 检索的目录
  • useSubdirectories : 是否检索子文件夹
  • regExp: 匹配文件的正则表达式,一般是文件名
  • mode: 加载模式。同步还是异步

require.context 执行后,返回一个方法 webpackContext,这个方法又返回一个 __webpack_require__ , 这个 __webpack_require__ 相当于require或者import

同时webpackContext还有第二个静态方法 keysresolve,一个id属性

  • keys:返回匹配成功模块的名字组成的数组
  • resolve:接受一个参数requestrequesttest文件夹下面匹配文件的相对路径,返回这个匹配文件相对于整个工程的相对路径
  • id:执行环境的id,返回的是一个字符串,只要用在module.hot.accpet,应该是热加载

主要代码

const images = require.context("@/assets/test", false, /\.png$/);
        let imageURL = ''
        images.keys().forEach(key => {
          const name = path.basename(key, '.png')
          if (name === 图片后缀名) {
            imageURL = images(key).default || images(key)
          }
        })
        return imageURL;

vue中require图片失败问题

在vue里,require路径上无法使用变量(会因找不到上下文环境而查找失败),报依赖错误,可通过require.context()解决。

变量在路径上,require找不到上下文环境:

// 错误
require("../assets/image/" + 变量 + "/img.jpg")

变量是最后的文件名或部分文件名,上下文环境找的到可以:

// 正确
require("../assets/image/ipad/" + "变量.jpg")
require("../assets/image/ipad/i" + "变量.jpg")
require("../assets/image/ipad/img" + "变量.jpg")
require("../assets/image/ipad/img.jpg")

require.context()

传入三个参数分别对应:

context = require.context("../assets/image/ipad/", true, /\.(png|jpg)$/);
// 相当于"../assets/image/ipad/img.jpg"
context("./img.jpg");
//指定上下文环境后,路径上可用变量
// "../assets/image/ipad/" + 变量 + "/img.jpg"
context("./"+"变量"+"img.jpg");

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • VUE +Element 实现多个字段值拼接功能

    VUE +Element 实现多个字段值拼接功能

    这篇文章主要介绍了VUE +Element 实现多个字段值拼接,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Vue element-admin权限控制之按钮使用

    Vue element-admin权限控制之按钮使用

    这篇文章主要介绍了Vue element-admin权限控制之按钮使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Vue 实现输入框新增搜索历史记录功能

    Vue 实现输入框新增搜索历史记录功能

    这篇文章主要介绍了Vue 输入框新增搜索历史记录功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • 详解Vue2.X的路由管理记录之 钩子函数(切割流水线)

    详解Vue2.X的路由管理记录之 钩子函数(切割流水线)

    本篇文章主要介绍了Vue2.X的路由管理记录之 钩子函数(切割流水线),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • vue router返回到指定的路由的场景分析

    vue router返回到指定的路由的场景分析

    这篇文章主要介绍了vue router返回到指定的路由的场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Vue实现全局的toast组件方式

    Vue实现全局的toast组件方式

    这篇文章主要介绍了Vue实现全局的toast组件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • vue中formdata传值给后台时参数为空的问题

    vue中formdata传值给后台时参数为空的问题

    这篇文章主要介绍了vue中formdata传值给后台时参数为空的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 每天学点Vue源码之vm.$mount挂载函数

    每天学点Vue源码之vm.$mount挂载函数

    这篇文章主要介绍了vm.$mount挂载函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 使用provide/inject实现跨组件通信的方法

    使用provide/inject实现跨组件通信的方法

    在 Vue 应用中,组件间通信是构建复杂应用时的一个常见需求,Vue3.x 提供了provide和inject API,让跨组件通信变得更加简洁和高效,本文将深入探讨如何使用provide和inject在Vue3.x中实现跨组件通信,并通过示例代码一步步进行说明,需要的朋友可以参考下
    2024-03-03
  • 详解vue父子组件关于模态框状态的绑定方案

    详解vue父子组件关于模态框状态的绑定方案

    这篇文章主要介绍了详解vue父子组件关于模态框状态的绑定方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06

最新评论